2017-06-19 49 views
0

我有什麼辦法可以知道「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的相同字體大小,如果運行的字號是defualt值。

順便說一句,我必須弄清楚一個函數中,對象'運行'是一個參數,我不知道它在函數外。

+0

是的,這就是我想要的。有時調用者傳遞參數「運行」是使用默認的fontsize(可能是12,無論)創建的,所以它將使用與其父文本塊相同的字體大小。因爲調用者知道父母的大小,他只是懶惰地再次分配。有時,他會通過一定的字體大小,而且他肯定希望以這種大小顯示。如果尺寸與默認尺寸沒有差別,我無法猜測來電者的目的。 – Lucavin

+0

哦,你可能會覺得奇怪,爲什麼不直接將它添加到TextBlock中。 Run對象是線程關聯的,不能被其他線程訪問。但TextBlock是由UI線程創建的。參數Run可以由不同的線程創建。爲了將它們放在一起,我爲UI線程創建了一個「運行」的新對象並複製它的屬性。所以默認值或不重要很重要。 – Lucavin

回答

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

打開辯論:一個父元素可能有不同的默認值,所以如果本地值未設置,並且默認值不同於當前值,您仍然不知道父值是默認還是修改(除非你檢查)。

+0

非常有幫助,謝謝! – Lucavin