Я хотел бы получить программный доступ к статическим ресурсам так же, как в 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]).