2010-06-08 46 views
2

我知道調用FrameworkElement(例如窗口)上的FindResource()可以用來在FrameworkElement的ResourceDictionary中查找資源。爲什麼FrameworkElement的FindResource()方法接受一個對象而不是字符串?

例如,我已經多次使用它來訪問樣式代碼,以動態地向樣式添加新的設置器。我總是將Style的x:Key值作爲字符串傳遞給FindResource()方法。像... Style style = w.FindResource("GridDescriptionColumn") as Style;

我的問題是,我注意到FindResource()接受一個類型爲object的參數,而不是string類型的參數。我無法想象我想用一個不是字符串的參數調用FindResource()的原因。這讓我覺得我可能沒有意識到使用FindResource()的其他方法。

有誰知道爲什麼FindResource()接受參數類型的對象而不是字符串?如果是這樣,那麼調用FindResource()的參數類型不是字符串的例子是什麼?

謝謝。

回答

9

資源可以將任何對象作爲關鍵字。在後面的代碼中添加一個帶有對象鍵的資源非常簡單,而且非常有用。在XAML中,大多數時候你使用的字符串是x:Key。不過還有的地方,關鍵是不是一個字符串一個常見的情況,你甚至可能沒有意識到這一點使用:

Style沒有x:Key,它應用到其TargetType的每個實例。但是編譯時添加了一個隱含的關鍵字:TargetType本身的類型。

簡而言之,在資源部分中編寫<Style TargetType="{x:Type Button}" />與編寫<Style TargetType="{x:Type Button}" x:Key="{x:Type Button}" />完全相同。要從代碼中獲取此資源,必須使用FindResource(typeof(Button)),傳遞Type而不是string

相關問題