WPF ResourceDictionary и DynamicResource

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

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

У меня есть главное окно, в котором я создаю Frame, и при щелчке некоторый UserControl загружается в тот же самый Frame. Я включаю свой 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. вся эта логика работает в коде С# кстати

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

person lanicor    schedule 13.12.2011    source источник


Ответы (3)


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

person H.B.    schedule 13.12.2011

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

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/SecurityManagerResources;component/DictionarySecurityResources.xaml"   />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>
person Brian Parker    schedule 30.06.2012

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

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="style/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
person illegal-immigrant    schedule 14.12.2011
comment
я делал это раньше, и это не работало, как сейчас... :( я не знаю, что я делаю неправильно... И я не могу использовать другие ресурсы, если я использую это... - person lanicor; 14.12.2011