Смешивание общих стилей WPF с ResourceDictionary - PullRequest
6 голосов
/ 13 января 2012

Я пришел из веб-разработки и WinForms в WPF, и, возможно, я еще не понял концепцию. Я могу определить общие стили для моего приложения в app.xaml. Например, я определил стиль для всех моих элементов управления ленты в этом файле.

Затем я попробовал Microsoft Blend и наткнулся на ResourceDictionary, который является чем-то вроде Resource File .resx, который я знал по WinForms.

Но, как я вижу, невозможно смешать эти два понятия. Например, следующий код xaml не будет работать, потому что ResourceDictionary должен быть единственным дочерним элементом.

<Application x:Class="Wpf.MyApplication.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
             StartupUri="MyMainWindow.xaml">
    <Application.Resources>
        <!-- Resources scoped at the Application level should be defined here. -->
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles/RibbonStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <BitmapImage x:Key="IconDokumentNeu" >Images/NewDocument_32x32.png</BitmapImage>
      <SolidColorBrush x:Key="LightGrayBrushKey">WhiteSmoke</SolidColorBrush>
    </ResourceDictionary>
    <Style TargetType="{x:Type ribbon:RibbonWindow}">
        <Setter Property="Icon" Value="../time2_32.png" />
        <Setter Property="TextOptions.TextFormattingMode" Value="Display" />
    </Style>
    </Application.Resources>
</Application>

Кажется, я не совсем понял концепцию. Может быть, вы можете мне помочь, почему это невозможно и как я могу использовать общие стили рядом с ResourceDictionary.

Ответы [ 2 ]

16 голосов
/ 13 января 2012

У вас уже есть ресурсы, определенные «рядом» со словарем, одно изображение и одна кисть.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!-- Dictionaries from file here -->
        </ResourceDictionary.MergedDictionaries>

        <!-- Other resources here -->
    </ResourceDictionary>
</Application.Resources>
3 голосов
/ 13 января 2012

Просто включите стиль {x: type} в словарь ресурсов

  <ResourceDictionary>
           <ResourceDictionary.MergedDictionaries> 
                   <!-- Dictionaries from file here -->  
           </ResourceDictionary.MergedDictionaries>    
           <Style TargetType="{x:Type ribbon:RibbonWindow}">         
               <Setter Property="Icon" Value="../time2_32.png" />         
               <Setter Property="TextOptions.TextFormattingMode" Value="Display" />  
           </Style> 
     </ResourceDictionary>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...