如何知道字体大小是默认值还是分配值

How to know the fontsize is default or assiged value

我有什么办法知道 "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,其字体大小设置为36。如果运行 的字体大小是默认值,它总是使用与TextBlock 相同的字体大小。

顺便说一句,我必须在函数中弄清楚,对象'Run'是一个参数,我对函数外一无所知。

以下结果在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

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