コード例 #1
0
ファイル: TextGridDraw.cs プロジェクト: Mrding/Ribbon
        protected override void RowRender(int index, double top, DrawingContext dc)
        {
            foreach (var item in Element.GetItems(index, GetViewRange()))
            {
                var block = item as ITerm;

                if (block == null)
                    continue;

                if (OutOfVisualRange(block))
                    continue;

                var rect = block.Start.Date.ToRect(Element.AxisXConverter, top, Element.BlockConverter.GetHeight(block));

                if (Element.BlockConverter.IsDirty(block))
                    dc.DrawRectangle(Background, null, rect.SetMargin(new Thickness(0, 0, 0, 1)));

                dc.DrawCenterText(Element.BlockConverter.GetContentText(block), rect, Element.BlockConverter.GetForeground(block));
            }

            //var itemsSource = Element.ItemsSource;
            //var axisXConverter = Element.AxisXConverter;
            //var blockConverter = Element.BlockConverter;
            //var screenStart = axisXConverter.ScreenToData(0);
            //var screenEnd = axisXConverter.ScreenToData(Element.RenderSize.Width);

            //var terms = itemsSource[index];
            //if (terms == null) return;

            //foreach (var item in terms)
            //{
            //    var block = item as ITerm;
            //    if (block == null)
            //        continue;
            //    var blockStart = block.Start;
            //    var blockEnd = block.End;

            //    if (blockStart > screenEnd || blockEnd < screenStart)
            //        continue;

            //    var blockLeft = axisXConverter.DataToScreen(blockStart);
            //    var blockRight = axisXConverter.DataToScreen(blockEnd);
            //    var blockHeight = Element.Interval;
            //    var blockTop = 0;

            //    //new Pen(Brushes.Black,1)
            //    var rect = new Rect(blockLeft, blockTop, blockRight - blockLeft, blockHeight);
            //    context.DrawRectangle(blockConverter.GetBackground(block), null, rect);
            //    //班名
            //    var text = blockConverter.GetContentText(block);
            //DrawCenterText(text, "/", blockConverter.FontSize, rect, Brushes.Black, context);
            //}
        }
コード例 #2
0
ファイル: CellBlockGridDraw.cs プロジェクト: Mrding/Ribbon
        protected override void RowRender(int index, double top, DrawingContext dc)
        {
            var viewRange = GetViewRange();
            var height = Element.Interval;

            Element.GetItems(index, viewRange).SaftyInvoke<IDateIndexer<ITerm>>(o =>
            {
                var day = viewRange.Start.Date;
                var end = viewRange.End.Date;
                while (day < end)
                {
                    var block = o[day];
                    if (block != null)
                    {
                        var foreground = Element.BlockConverter.GetForeground(block);

                        var rect = day.ToRect(Element.AxisXConverter, top, height);

                        var dateTerm = Element.ItemsSource[index].SaftyGetProperty<DateTerm, IDateIndexer<DateTerm>>(t => t[day]);
                        

                        if (dateTerm != null && Background != Brushes.Transparent && Background != null)
                        {
                            // dc.DrawGuidelineRect(null, _pen, rect.SetMargin(new Thickness(0, -1, 0, 1)));

                            dc.DrawRectangle( Element.BlockConverter.GetBackground(block) ?? Background, null, rect.SetMargin(new Thickness(1, 0, 0, 0.5))); //like dirty cell
                        }

                        if (dateTerm != null && !string.IsNullOrEmpty(dateTerm.Text))
                        {
                            dc.DrawCenterText(dateTerm.Text, rect, foreground);
                        }
                        else
                        {
                            var text = Element.BlockConverter.GetContentText(block);
                            if (!string.IsNullOrEmpty(text))
                            {
                                FormattedText formattedText;

                                if (!_formatedTextCaches.ContainsKey(text))
                                {
                                    formattedText = text.ToFormattedText(foreground);
                                    var charWidth = formattedText.Width / text.Length;
                                    if (formattedText.Width > rect.Width)
                                    {
                                        var maxChar = (int)(rect.Width / charWidth);
                                        formattedText = text.Substring(0, maxChar).ToFormattedText(foreground);
                                    }
                                    _formatedTextCaches[text] = new Tuple<FormattedText, double>(formattedText, ((rect.Height - formattedText.Baseline) / 2));
                                }
                                else
                                    formattedText = _formatedTextCaches[text].Item1;

                                var horizontailMargin = (rect.Width - formattedText.Width) / 2; //margin left & right

                                //Item1 = formatedText , Item2 = top margin
                                if(dateTerm==null)
                                    Element.BlockConverter.GetBackground(block).SaftyInvoke(
                                        b => dc.DrawRectangle(b, null, rect.SetMargin(new Thickness(1, 0, 0, 0.5))));

                                dc.DrawText(formattedText, new Point(rect.Left + horizontailMargin, rect.Top + _formatedTextCaches[text].Item2));
                                
                            }
                        }
                    }
                    day = day.AddDays(1);
                }
            });

            //Element.ItemsSource[index].SaftyInvoke<IDateIndexer<DateTerm>>(o =>
            //{
            //    var viewRange = GetViewRange();
            //    var day = viewRange.Start.Date;
            //    var end = viewRange.End.Date.AddDays(1);
            //    while (day < end)
            //    {
            //        var dateTerm = o[day];
            //        if (dateTerm != null)
            //        {
            //            var rect = dateTerm.Date.ToRect(Element.AxisXConverter, 0, Element.Interval);
            //            dc.DrawRectangle(Background, null, rect.SetMargin(new Thickness(0, 0, 0, 1)));
            //            dc.DrawCenterText(dateTerm.Text, rect, Brushes.White);
            //        }

            //        day = day.AddDays(1);
            //    }
            //});

            //Element.ItemsSource[index].SaftyInvoke<IDateIndexer<DateTerm>>(o =>
            //{
            //    var viewRange = GetViewRange();
            //    var day = viewRange.Start.Date;
            //    var end = viewRange.End.Date.AddDays(1);
            //    while (day < end)
            //    {
            //        var dateTerm = o[day];
            //        if (dateTerm != null)
            //        {
            //            var rect = dateTerm.Date.ToRect(Element.AxisXConverter, 0, Element.Interval);
            //            dc.DrawRectangle(Background, null, rect.SetMargin(new Thickness(0, 0, 0, 1)));

            //        }

            //        day = day.AddDays(1);
            //    }
            //});

            //foreach (var item in Element.GetItems(index, GetViewRange()))
            //{
            //    var block = item as ITerm;

            //    if (block == null)
            //        continue;

            //    if (OutOfVisualRange(block)) continue;
            //    //注意 HrDate

            //    var foreground = Element.BlockConverter.GetForeground(block);

            //    var date = Element.BlockConverter.GetStart(block);

            //    var rect = date.ToRect(Element.AxisXConverter, 0, Element.BlockConverter.GetHeight(block));

            //    var dateTerm = Element.ItemsSource[index].SaftyGetProperty<DateTerm, IDateIndexer<DateTerm>>(o => o[date]);

            //    if (dateTerm != null && Background != Brushes.Transparent && Background != null)
            //        dc.DrawRectangle(Background, null, rect.SetMargin(new Thickness(0, 0, 0, 1)));
            //    if (dateTerm != null && !string.IsNullOrEmpty(dateTerm.Text))
            //    {
            //        dc.DrawCenterText(dateTerm.Text, rect, foreground);
            //    }
            //    else
            //        dc.DrawCenterText(Element.BlockConverter.GetContentText(block), rect, foreground);

            //}
        }