Словарь ресурсов не найден?

По крайней мере, я думаю, что это проблема...

У меня есть проект, структурированный так (файлы опущены для краткости)

Project
  Assets
    ResourceDictionaries
       Styles.xaml
  MainWindow.xaml

Я ссылаюсь на словарь ресурсов следующим образом в MainWindow.xaml

<Window.Resources>
  <ResourceDictionary>
     <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Assets/ResourceDictionaries/Styles.xaml"/>
     </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
<Window.Resources/>

Но ни один из стилей не применяется ни к каким элементам.

Я проверил, что для действия сборки установлено значение page. Я также пытался присвоить некоторым стилям в словаре ключ, но Blend не может «видеть» эти ключи.

Что я делаю не так?

Изменить: Соответствующий код. Очевидно, что если я помещу свойства в фактические элементы, они будут работать, но в словаре они не работают:

MainWindowStyles.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Company.Client.Assets.ResourceDictionaries"
                    xmlns:wpf="http://schemas.syncfusion.com/wpf">

    <Style TargetType="{x:Type wpf:RibbonWindow}">
        <Setter Property="wpf:SkinStorage.VisualStyle" Value="Office2010Silver"/>
    </Style>

    <Style TargetType="{x:Type wpf:Ribbon}">
        <Setter Property="BackStageColor" Value="#622166"/>
    </Style>

</ResourceDictionary>

MainWindow.xaml

<wpf:RibbonWindow x:Class="Company.Client.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:wpf="http://schemas.syncfusion.com/wpf"
        xmlns:local="clr-namespace:Company.Client"
        mc:Ignorable="d"
        Title="MainWindow" Height="600" Width="800">
    <wpf:RibbonWindow.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Assets/ResourceDictionaries/MainWindowStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </wpf:RibbonWindow.Resources>
    <Grid>
        <wpf:Ribbon BackStageHeader="DB">
            <wpf:Ribbon.BackStage>
                <wpf:Backstage>
                    <wpf:BackStageCommandButton Header="Save"/>
                </wpf:Backstage>
            </wpf:Ribbon.BackStage>
        </wpf:Ribbon>
    </Grid>
</wpf:RibbonWindow>

Изменить 2. Это то, что было опробовано до сих пор:

  • Пробовал применять стили к обычным элементам управления (кнопка, метка и т. д.). Работает
  • Пробовал добавлять стили под <wpf:MainWindow.Resources>. Не работает
  • Пробовал пакетный URI. Не работает
  • Добавление стилей/свойств к фактическим элементам. Работает (очевидно)

person Jake    schedule 11.01.2016    source источник
comment
всё хорошо. также покажите свой resdictionary plz.   -  person AnjumSKhan    schedule 11.01.2016
comment
Вопрос изменен.   -  person Jake    schedule 11.01.2016
comment
Пожалуйста, проверьте, работает ли ваш словарь с обычными кнопками/сетками и т. д.   -  person AnjumSKhan    schedule 11.01.2016
comment
Работает с обычными кнопками и элементами управления.   -  person Jake    schedule 11.01.2016
comment
теперь проверьте, работают ли ваши текущие стили, если вы определяете их непосредственно в своих ресурсах MainWindow и избегаете словаря.   -  person AnjumSKhan    schedule 11.01.2016
comment
Нет. Если они определены в разделе <MainWindow.Resources>, стили не применяются.   -  person Jake    schedule 11.01.2016
comment
это не MainWindow.Resources, а ‹wpf:RibbonWindow.Resources› в вашем случае.   -  person AnjumSKhan    schedule 11.01.2016


Ответы (3)


Вы пробовали эти два шага:

  • Добавьте MainWindowStyles.xaml в раздел Application.Resources в app.xaml.
  • Используйте явный стиль для RibbonWindow, например:

    <RibbonWindow>
    ...
    <RibbonWindow.Style>
        <StaticResource ResourceKey="RadRibbonWindowStyle"/>
    <RibbonWindow.Style>
    
person Alex Seleznyov    schedule 11.01.2016
comment
Я проверю это через минуту. Я обновлю, если он работает. - person Jake; 11.01.2016
comment
Только что проверил, не работает. Я думаю, что эта библиотека может быть проблемой, а не фактический словарь. - person Jake; 11.01.2016
comment
Вы добавили ключевой атрибут к ресурсу, не так ли? Видите ли вы какие-либо ошибки, связанные с ресурсами, в окне вывода VS? - person Alex Seleznyov; 11.01.2016
comment
На сайте Syncfusion также есть некоторая информация — help.syncfusion.com/wpf/ribbon/stylingandtemplates< /а> - person Alex Seleznyov; 11.01.2016
comment
Да, я добавил ключ, но затем, когда приложение загружается, окно пусто. Я проверю эту документацию на случай, если я упущу что-то очевидное. - person Jake; 11.01.2016
comment
Хорошо, я попытался установить словарь ресурсов на <ResourceDictionary Source="/Syncfusion.Tools.Wpf;Component/FrameWork/Ribbon/themes/Office2010Silver.xaml"/>, но он говорит: «Произошла ошибка при поиске словаря ресурсов /Syncfusion.Tools.Wpf;Component/Framework/Ribbon/themes/Office2010Silver.xaml». Какие-либо предложения? - person Jake; 11.01.2016
comment
Вы добавили ссылку на сборку Syncfusion.Tools.Wpf и установили для параметра «Копировать в локальный» значение «Истина»? Возможно, вы захотите использовать такой инструмент, как dotPeek, чтобы проверить сборку на наличие правильного пути к ресурсу. Имейте в виду, кстати. - person Alex Seleznyov; 11.01.2016
comment
Да, у меня сейчас открыт dotPeek, просто пытаюсь понять, где искать. - person Jake; 11.01.2016
comment
Сборка - Ресурсы - что-то.г.ресурсы. Все, что ниже, — это путь, который вам нужно указать в атрибуте Source сразу после component/. Рабочий пример для Telerik: ‹ResourceDictionary Source=/Telerik.Windows.Themes.Windows8;component/Themes/System.Windows.xaml /› - person Alex Seleznyov; 11.01.2016
comment
Ну, я делаю что-то прямо сейчас. Цвет BackStage по-прежнему желтый, но я не получаю никаких ошибок или исключений. Буду копаться, пока что-нибудь не найду. - person Jake; 11.01.2016

Используйте синтаксис pack URI:

<ResourceDictionary Source="pack://application:,,,/Assets/ResourceDictionaries/Styles.xaml"/>
person jnovo    schedule 11.01.2016
comment
Это не работает. Кроме того, если я щелкну правой кнопкой мыши URI пакета в blend и нажму «Перейти к определению», файл словаря ресурсов откроется на новой вкладке, верно? - person Jake; 11.01.2016

Добавление этого в дополнение к принятому ответу.

Мой код теперь выглядит так. Мне не удалось заставить его работать со свойством VisualStyle, но это сойдет. Если кто-нибудь знает, как поместить это в словарь ресурсов, помощь будет очень признательна. :)

Короче говоря, это код, который работает на основе обмена между мной и @AlexSeleznyov.

MainWindowStyles.xaml

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

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Syncfusion.Tools.Wpf;component/framework/ribbon/themes/office2010silverstyle.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    <Style x:Key="MainRibbon" TargetType="{x:Type wpf:Ribbon}" BasedOn="{StaticResource Office2010SilverRibbonStyle}">
        <Setter Property="BackStageColor" Value="#622166"/>
    </Style>
</ResourceDictionary>

MainWindow.xaml

<wpf:RibbonWindow x:Class="Company.Client.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:wpf="http://schemas.syncfusion.com/wpf"
        xmlns:local="clr-namespace:Company.Client"
        mc:Ignorable="d"
        wpf:SkinStorage.VisualStyle="Office2010Silver"
        Title="MainWindow" Height="600" Width="800"
        Icon="Assets/Icons/ApplicationIcon.ico">
    <wpf:RibbonWindow.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Assets/ResourceDictionaries/MainWindowStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </wpf:RibbonWindow.Resources>
    <Grid>

        <wpf:Ribbon BackStageHeader="File" Style="{StaticResource MainRibbon}">
            <wpf:Ribbon.BackStage>
                <wpf:Backstage>
                    <wpf:BackStageCommandButton Header="Save"/>
                </wpf:Backstage>
            </wpf:Ribbon.BackStage>
        </wpf:Ribbon>
    </Grid>
</wpf:RibbonWindow>
person Jake    schedule 11.01.2016