WPF UserControl资源

时间:2012-11-03 15:03:44

标签: wpf xaml resourcedictionary

我在WPF用户控件程序集中创建了 ResourceDictionary 。我希望能够在此 UserControl 中使用此功能,并在此分隔文件中包含所有样式。

ResourceDictionary:

<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>

它的地址是用户控件程序集资源/ mainResX.xaml 并且视图位于相同的程序集/ Views / view.xaml

我认为可能是:

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

此外,我在UserControl中尝试了以下代码,以定义Per Control Resources,但这种方式似乎也无法找到资源。

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

我应该在何处以及如何进行/定义?

2 个答案:

答案 0 :(得分:3)

我无法从提供的信息中了解您的文件结构。

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

他们是否在同一个集会?您可以根据需要将“...”字符串添加到该位置,然后使用文件夹(即“../ Resources / mainResX.xaml”)

如果它们位于不同的程序集中,则需要指定包uri。实际上你可以做到这一点,虽然在没必要的时候有点麻烦。这是一个例子

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

HTH,
Berryl

答案 1 :(得分:1)

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

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