如何知道fontsize是默认值或assiged值

时间:2017-06-19 03:05:39

标签: wpf default

我有没有办法知道" Run"的字体大小?是有价值的还是有价值的?下面的代码可以解释我的目的:

Run run = new Run();// here run.Fontsize is default maybe 12
run.FontSize = 12;// now it is assiged to 12
tbk.Inlines.Add(run);

tbk是在xaml中定义的TextBlock,其fontsize设置为36.如果Run的fontizes是一个defualt值,它总是使用与TextBlock相同的fontsize。

顺便说一下,我必须在一个函数中找到它,对象'运行'是一个参数,我在函数之外没有任何关于它的知识。

1 个答案:

答案 0 :(得分:1)

localValue2 = DependencyProperty.UnsetValue

中的以下结果
object o1 = new Run("Test") { FontSize = 12 };
var r1 = o1 as TextElement;
if (r1 != null)
{
    // 12.0
    var localValue1 = r1.ReadLocalValue(TextElement.FontSizeProperty);
    // 12.0
    var getValue1 = r1.GetValue(TextElement.FontSizeProperty);
}
object o2 = new Run("Test");
var r2 = o2 as TextElement;
if (r2 != null)
{
    // UnsetValue
    var localValue2 = r2.ReadLocalValue(TextElement.FontSizeProperty);
    // 12.0
    var getValue2 = r2.GetValue(TextElement.FontSizeProperty);
}

但是,当TextElement是树的一部分时,它可能会从其父级继承非默认值。然后仍然没有本地值,但它也不是默认值。

object o3 = new Run("Test");
var textParent = new TextBlock(o3 as Run) { FontSize = 13 };
var r3 = o3 as TextElement;
if (r3 != null)
{
    // UnsetValue
    var localValue3 = r3.ReadLocalValue(TextElement.FontSizeProperty);
    // 13.0
    var getValue3 = r3.GetValue(TextElement.FontSizeProperty);
}

如果您想知道默认值,请将var runElementFontsizeDefault = TextElement.FontSizeProperty.GetMetadata(r1).DefaultValue;Run r1一起使用。

开放辩论:父元素可能具有不同的默认值,因此如果未设置本地值且默认值不同于当前值,您仍然不知道父值是默认值还是已修改(除非你检查)。