Как я могу получить фактический ресурс из ComponentResourceKey? - PullRequest
3 голосов
/ 03 декабря 2008

У меня есть 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 ]

4 голосов
/ 03 декабря 2008

Я понял это.

myTextBox.Style = 
        Application.Current.TryFindResource(Resources.BaseControlStyleKey)
        as Style;
1 голос
/ 26 марта 2009

После того как вы создали отдельный держатель 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>
...