2010-11-29 54 views
1

我想知道如何在xaml中設置本地int變量的值爲Int.MaxValue(在我的例子中是ResourceDictionary中)。在xaml中將本地int變量的值設置爲Int.MaxValue

是這樣的:(但一些作品:))

的xmlns:S =「CLR的命名空間:系統;裝配= mscorlib程序

<s:Int32 x:Key"HelloWorld">{x:Static s:Int.MaxValue}</s:Int32> 

編輯:

@Ian:

謝謝:) 但我該如何使用靜態資源作爲int? 比方說,如果我有我的ResourceDictionary

<ResourceDictionary> 
    <x:Static 
     x:Key="HelloWorld" 
     Member="s:Int32.MaxValue" 
     /> 
... 
    <blablalba TooltipService.ShowDuration="{StaticResource HelloWorld}"/>` <-- this does not work by the way 
</ResourceDictionary> 

回答

2

這應做到:

<x:Static 
    x:Key="HelloWorld" 
    Member="s:Int32.MaxValue" 
    /> 

萬一目前還不清楚什麼實際發生在這裏,它使用一個方便的技巧,很多人不知道:雖然像標記擴展x:Static通常用在括號({})中的屬性中,您也可以使用它們的元素語法。這在你想要使用標記擴展的情況下很有用,但Xaml語法需要一個元素。 (在涉及集合的場景中,這是最常需要的,就像這個一樣。)

對於標記擴展使用元素語法的一個小問題是,您不再傳遞構造函數參數。 (從技術上講,在XAML 2009中引入了構造函數參數支持,自.NET 4開始支持這種支持。但是,只有在通過新的Xaml API加載Xaml時才支持構造函數參數支持,因此MSDN文檔中提到了new XAML 2009 features are not supported for compiled Xaml in WPF。)這種帶有標記擴展的技巧提供了默認的構造函數,並且提供了可以用來代替構造函數參數的屬性。 StaticExtension提供了一個Member屬性來完成這個技巧,所以我們在這裏確定,但請注意,有時候,由於無法調用相應的構造函數,您會被卡住。

請注意,當您鍵入此值時,Visual Studio中的Xaml IntelliSense可能會提示StaticExtension,這是此標記擴展的真實名稱。當您使用屬性語法時,它會脫離Extension部分,但包含元素,但由於某些原因,它似乎不是。無論哪種形式都是正確的 - 我會按照我在這裏寫的內容去做,而不是IntelliSense的建議,因爲我們更習慣於看到屬性"{x:Static ...}"而不是"{x:StaticExtension ...}" - 同樣,這兩個都是合法的,但是我們傾向於離開關閉Extension

1

問題是,沒有類Int如果您嘗試使用Int32它的工作原理