WPF ResourceDictionary и DynamicResource - PullRequest
       16

WPF ResourceDictionary и DynamicResource

2 голосов
/ 14 декабря 2011

Я новичок в WPF, так что, возможно, это будет вопрос "нуб", но я не могу найти ответ на него (и это кажется таким простым) ...

Хорошо, я программирую приложение WPF, и я хочу использовать что-то похожее на CSS для веб-страниц, поэтому я нашел ResourceDictionary и попытался использовать его ...

У меня есть главное окно, в котором я создаю фрейм, и по клику некоторые UserControl загружаются в тот же фрейм. Я включаю мой ResourceDictionary (root / style / Styles.xaml) в мое главное окно, например:

<Window.Resources>
    <ResourceDictionary x:Key="styles" Source="style/Styles.xaml" />
</Window.Resources>  

, в котором у меня есть:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style x:Key="ProductsRequired" TargetType="{x:Type Label}">
    <Setter Property="Height" Value="28" />
    ...

Я не использую его в своем главном окне, но хочу использовать его в моих пользовательских элементах управления, которые загружаются в это главное окно, и я пытаюсь использовать его следующим образом:

<Label Name="product1" Style="{DynamicResource ProductsRequired}"  />

Предупреждение, которое я получаю все время: ресурс "ProductsRequired" не может быть разрешен.

Я даже пытался включить стили в свой UserControl

<UserControl.Resources>
  <ResourceDictionary x:Key="styles" Source="../style/Styles.xaml" />
</UserControl.Resources>

и ничего не происходит ...

Ну, мой вопрос длинный, но я хотел быть ясным ...:)

P.S. вся эта логика работает в коде C # кстати

private ResourceDictionary myStyles = new ResourceDictionary();
Style ProductsRequired = myStyles["ProductsRequired"] as Style;
product1.Style = ProductsRequired;

Ответы [ 3 ]

1 голос
/ 30 июня 2012

вы ссылаетесь на правильную сборку? например:

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/SecurityManagerResources;component/DictionarySecurityResources.xaml"   />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>
1 голос
/ 14 декабря 2011

Это не подходит, вы добавляете словарь ресурсов в качестве ресурса, когда вам нужно добавить его к ресурсам, к нему нельзя получить доступ, как это.Вам необходимо добавить его к MergedDictionaries (примеры использования приведены в MSDN!) .

0 голосов
/ 14 декабря 2011

Вам нужно сделать это

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="style/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
...