格式化文本(FormattedText)已经过时,请使用PixelsPerDip覆盖(PixelsPerDip override)。

27

我正在尝试为水平滑块填充标签,我成功地使用一个继承自TickBar的类通过将文本传递给FormattedText构造函数来完成。但是,现在当我将相同的代码复制并粘贴到使用.NET Framework版本4.6.2的Visual Studio中时,会显示:

FormattedText.FormttedText已过时,请使用PixelsPerDip重载。

我参考了In .NET Framework 4.6.2 the FormattedText() is Obsoleted, how can i fixed it

但是我该如何在当前情况下使用它。请帮忙。

FormattedText formattedText = new FormattedText(text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 16, Brushes.Black);
dc.DrawText(formattedText, new Point((tickFrequencySize * i), 30)); //dc is Drawing Context.

这是完整的类:

public class CustomTickBar : TickBar
    {
        public static string FontTextList { get; set; }
        protected override void OnRender(DrawingContext dc)
        {
            //string str = "Small, Medium, Large, Extra\n Large";
            if (!string.IsNullOrEmpty(FontTextList))
            {
                string[] ar = FontTextList.Split(',');

                Size size = new Size(base.ActualWidth, base.ActualHeight);
                int tickCount = (int)((this.Maximum - this.Minimum) / this.TickFrequency) + 1;
                //int tickCount = 4; 
                if ((this.Maximum - this.Minimum) % this.TickFrequency == 0)
                    tickCount -= 1;
                Double tickFrequencySize;
                // Calculate tick's setting
                tickFrequencySize = (size.Width * this.TickFrequency / (this.Maximum - this.Minimum));
                string text = "";
                FormattedText formattedText = null;
                double num = this.Maximum - this.Minimum;
                int i = 0;
                // Draw each tick text
                for (i = 0; i <= tickCount; i++)
                {

                    //text = Convert.ToString(Convert.ToInt32(this.Minimum + this.TickFrequency * i), 10);
                    text = ar[i];
                    formattedText = new FormattedText(text, CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 16, Brushes.Black);
                    dc.DrawText(formattedText, new Point((tickFrequencySize * i), 30));


                }
            }
        }

如果有帮助的话,我正在使用#pragma warning disable来禁用错误。但如果有人知道替代方法,那将会很有帮助。 - nikhil
1个回答

60

试一下这个:

FormattedText formattedText = new FormattedText(text, CultureInfo.GetCultureInfo("en-us"),
    FlowDirection.LeftToRight, new Typeface("Verdana"), 16, Brushes.Black,
    VisualTreeHelper.GetDpi(this).PixelsPerDip);

我看过这个MSDN文档https://msdn.microsoft.com/en-us/library/ms602325(v=vs.110).aspx,但没有找到解决方案。现在经过一些搜索,我找到了这个MSDN链接https://msdn.microsoft.com/en-us/library/mt668685(v=vs.110).aspx。 - nikhil
VisualTreeHelper.GetDpi() 仅在 .NET Framework 4.6.2 及以上版本可用。在早期的框架版本中如何实现此功能?或者以前从未有人需要过这个功能,哈哈。 - Gsv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接