什么是最终将成为样式

时间:2016-04-07 06:46:30

标签: wpf

随着我逐渐开始更多地了解wpf的样式和数据模板以及它们如何被重用所以感觉有一个单独的项目,其中定义了各种stles和模板,并在应用程序中引用为合并字典(s )需要使用它们是有道理的。

我在这里看了几个帖子和代码项目。一个特别的here非常有意义,但我看过的每篇文章似乎都省略了一点。

让我们说我的风格定义如下:

<Style TargetType="dxb:BarButtonItem"
           x:Key="NewStBtnStyle">
        <Setter Property="SuperTip">
            <Setter.Value>
                <dx:SuperTip>
                    <dx:SuperTipHeaderItem Content="New" />
                    <dx:SuperTipItem Content="Create a new record"
                                     Glyph="pack://application:,,,/FishTrackerProfessional;component/Resources/Images/32/New.png">
                        <dx:SuperTipItem.LayoutStyle>
                            <Style TargetType="{x:Type dx:Items2Panel}">
                                <Setter Property="Alignment"
                                        Value="Right" />
                                <Setter Property="HorizontalIndent"
                                        Value="20" />
                            </Style>
                        </dx:SuperTipItem.LayoutStyle>
                    </dx:SuperTipItem>
                    <dx:SuperTipItemSeparator />
                    <dx:SuperTipItem Content="Opens a new record entry form in a new window">
                        <dx:SuperTipItem.ContentTemplate>
                            <DataTemplate>
                                <TextBlock FontFamily="Calibri"
                                           Foreground="Gray"
                                           FontSize="11"
                                           Text="{Binding}" />
                            </DataTemplate>
                        </dx:SuperTipItem.ContentTemplate>
                    </dx:SuperTipItem>
                </dx:SuperTip>
            </Setter.Value>
        </Setter>
    </Style>

我可以看到它会有用,不仅仅是在一个项目中,而是在几个项目中,并且通过一些调整更有用它可以修改为不同的类似项目产生类似的信号。

现在我的问题是这个。我想将一组样式放入一个文件(myNewStyles.xaml)。我是一个有窗口的家庭

<window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

或用户控件开头

<userControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

我原以为以下是开始包含样式的xaml文件的正确语法

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

IntelliSense告诉我

  

“Style”类型的值无法添加到集合或字典中   类型'资源字典'。

那么启动这样一个xaml文件的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

嘿,您可以做的是在资源中添加此文件,要使用此文件,您可以在 App.XAML 中添加文件引用。

所以基本上你创建一个样式,将它添加到资源字典(.resx)文件然后你转到App.Xaml然后你添加样式表的引用如下

    <Application x:Class="DualScreenSampleApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Dictionary1.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

答案 1 :(得分:0)

尝试以下方法:

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

答案 2 :(得分:0)

如果您希望拥有样式存储库并希望在解决方案的所有项目中使用Styles,我建议您进一步阅读。

您可以在解决方案中创建新项目以保留资源。要做到这一点:

  1. 您可以添加到解决方案WpfControlLibrary1并调用它,例如YourProject.Resources

  2. 创建文件夹Themes

  3. 在每个资源组的`Themes文件夹中创建不同的xaml文件(如Generic.WPF.xaml用于标准WPF控件&#39;样式,Generic.Brushes.xaml用于画笔等)。

    < / LI>
  4. 使用以下内容创建文件Themes\Generic.xaml(完全使用此名称,它将在以后增加巨大优势):

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Generic.Brushes.xaml"/>
        <ResourceDictionary Source="Generic.WPF.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    
  5. 现在您可以将这些资源添加到您的解决方案的任何项目中(您有单独的项目,对吧?),方法是向该项目添加对YourApplication.Resources的引用并添加到您的视图中XAML:

     <UserControl.Resources>
     <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
           <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <!-- Put your not shared resource here -->
     </ResourceDictionary>
     </UserControl.Resources>