Как я могу получить фактический ресурс от ComponentResourceKey?
У меня есть ComponentResourceKey, определенный в моем словаре ресурсов, как это:
<Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:Resources}, ResourceId=BaseControlStyle}" TargetType="{x:Type FrameworkElement}">
<Setter Property="Margin" Value="4,4,0,0" />
</Style>
У меня есть статический класс, который я использую в качестве ярлыка для предоставления ключей ресурсов, например:
public class Resources
{
public static ComponentResourceKey BaseControlStyleKey
{
get
{
return new ComponentResourceKey(typeof(Resources), "BaseControlStyle");
}
}
}
Обычно, когда я использую этот стиль, я делаю что-то вроде этого:
<TextBlock Style="{DynamicResource {x:Static local:Resources.BaseControlStyleKey}}"/>
Тем не менее, у меня есть сценарий, где мне нужно установить стиль в коде, как это:
myTextBox.Style = Resources.BaseControlStyleKey // Does not work.
Есть идеи, как извлечь стиль из ComponentResourceKey?
2 ответа
Решение
Я понял.
myTextBox.Style =
Application.Current.TryFindResource(Resources.BaseControlStyleKey)
as Style;
После того, как вы создали отдельный держатель ComponentResourceKey (класс Resources), вы можете упростить объявление ключа.
Вместо:
<Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:Resources}, ResourceId=BaseControlStyle}" TargetType="{x:Type FrameworkElement}">
<Setter Property="Margin" Value="4,4,0,0" />
</Style>
Вы можете просто использовать:
<Style x:Key="{x:Static local:Resources.BaseControlStyle}" TargetType="{x:Type FrameworkElement}">
<Setter Property="Margin" Value="4,4,0,0" />
</Style>