1

我在 WPF 用户控件程序集中创建了一个ResourceDictionary。我希望能够在这个UserControl中使用它,并在这个单独的文件中拥有所有样式。

资源字典:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">    
    <Style x:Key="c1BtnX1">
        <Setter Property="Background" Value="Bisque"></Setter>
    </Style>    
</ResourceDictionary>

它的地址是 The User Control Assembly Resources/mainResX.xaml 和 View 在同一个 assembly/Views/view.xaml

我认为的用法可能是:

<Border Style="{StaticResource ResourceKey=c1BtnX1}" 
        BorderBrush="Black"  
        Width="20" 
        Height="20">
               <TextBlock Text="X" />
</Border>

此外,我在 UserControl 中尝试了以下代码来定义每个控件资源,但这种方式似乎也找不到资源。

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

我应该在哪里以及如何放置/定义它?

4

2 回答 2

4

我无法从提供的信息中判断您的文件结构是什么。

如果 resource.xaml 和 control.xaml 位于同一个程序集的同一个文件夹中,您只需先引用 mainResX.xaml 而不使用“/Resources”;否则你需要以某种方式考虑文件结构。

他们在同一个程序集中吗?您可以根据需要将尽可能多的“../”字符串“遍历”到该位置,并使用文件夹(即“../Resources/mainResX.xaml”)

如果它们在不同的程序集中,则需要指定一个包 uri。您实际上总是可以这样做,尽管在不必要的时候有点麻烦。这是一个例子

<ResourceDictionary Source="pack://application:,,,/MyAssembly.Wpf;component/Resources/mainResX.xaml" />

HTH,
绿柱石

于 2012-11-03T15:42:47.527 回答
2

就我个人而言,我喜欢使用我的 App.xaml 来指定 XAML 文件的“MergedDirectory”,其中包含我在我的应用程序中全局使用的样式。我通常有一个“DefaultStyles.xaml”来设置任何全局样式(例如,当您希望应用程序中的所有文本框看起来相同而不指定样式时)。然后我有一个“Styles.xaml”来设置特定的样式,或者如果你真的有一堆,你甚至可以为每个控件类型设置一个 xaml...

您将它们放在 app.xaml 下的事实使它们对您的应用程序是全局的,并且不需要您不断地重新指定路径和字典。当然,这可能不适合所有编码情况,但对我来说这是一个节省时间的方法。

于 2012-11-03T15:48:33.487 回答