用户控件库中的xaml ResourceDictionary

时间:2016-04-06 09:31:51

标签: wpf user-controls resourcedictionary

如何在用户控件库中定义ResourceDictionary并通过Xaml-Code访问它们。

我创造了这样的东西:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
                xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
                >


    <Style x:Key="NormalStyle" TargetType="{x:Type Control}">
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="FontSize" Value="12" />
        <Setter Property="FontFamily" Value="Arial" />
        <Setter Property="FontStyle" Value="Normal" />
    </Style>
    .
    .
    .
</ResourceDictionary

现在我想将这个“NormalStyle”用于Control

 Style="{StaticResource NormalStyle}"

但是Visual Studio说“资源”NormalStyle“无法解决。” 我错过了什么或忘记了什么?

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

您必须将ResourceDictionaryUserControl.Resources包含或合并,如下所示。在源代码中指定ResourceDictionary的路径。

<UserControl.Resources>
        <ResourceDictionary Source="MyResourceDictionary.xaml"/>
</UserControl.Resources>

OR

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

然后您可以使用UserControl中字典中的资源

Style="{StaticResource NormalStyle}"

答案 1 :(得分:0)

请在App.xamal中添加样式引用,以便在运行应用程序时加载它。 当您添加任何外部资源文件时,您需要在App.xamal中添加它以在您的应用程序中获取它的引用,否则您需要手动添加对每个xamal表单的引用以访问样式和模板

这就是你要如何使用MergedDictionaries在App.xamal中添加它,而不是在你的应用程序中引用任何样式它将有它的参考

 <ResourceDictionary.MergedDictionaries>

                    <!-- 
                        Styles that define common aspects of the platform look and feel
                        Required by Visual Studio project and item templates
                     -->
                    <ResourceDictionary Source="Common/CommonStyles.xaml"/>

                    <ResourceDictionary Source="Project/Common/CommonStyles.xaml"/>
                </ResourceDictionary.MergedDictionaries>

希望有所帮助

答案 2 :(得分:-1)

好吧,所以我把它弄成了一半。在我的UserControlLibrary中,我创建了一个新的Xaml-File“UIStandards”,将我的所有样式放入其中。现在在我的主项目中,我想访问这些样式,我想我应该使用MergedDictionary。

我做的是这个:

<Application x:Class="MentorPlusClientWindowsWPF.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:MentorPlusClientWindowsWPF"
         xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
         xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro"
         Startup="Application_Startup">
<!--StartupUri="MainWindow.xaml"-->

<Application.Resources>
    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/CrossProjectUserControls;component/UIStandards.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

正如您所看到的,我引用了UISTandards.xaml,但在MainProject内的UserControl中,找不到任何样式。 任何解决方案?