我想以编程方式访问静态资源,就像在XAML中一样:
<TextBlock Text="{Binding Source={StaticResource My.Text.Key}}" />
不管我的静态资源是在TextBlock、某个父元素(例如UserControl)甚至是应用程序上定义,这都可以正常工作。看起来无论是StaticResource绑定表达式还是元素本身都知道如何遍历元素树。我想以编程方式做同样的事情:
<UserControl x:Class="MyCustomControl" ...>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources.xaml"/> <!-- Sets 'My.Text.Key' to System.String 'Hello, World!' -->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
</UserControl>
public partial class MyCustomControl
{
public MyCustomControl()
{
InitializeComponent();
string myCustomValue = this.Resources[MyCustomValue] as string; // myCustomValue becomes null!
}
}
即使在这个简单的测试中,我的资源似乎也无法以编程方式访问。而这只是我真正想做的事情的简化版本:通过一个具有自定义动态属性的元素(例如uiElement.Resources[key])找到静态资源。