【问题标题】:WPF UserControl ResourcesWPF 用户控件资源
【发布时间】:2015-06-11 14:07:06
【问题描述】:

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

它的地址是用户控件程序集资源/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>

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

【问题讨论】:

  • XAML 文件的构建操作是否设置为资源? (是资源吗?我附近没有编码电脑……)
  • 它的 Build Action 没有,我将其更改为“Embeded Resource”,但我认为如果我想在跨组件上使用它会很好。不确定这可能是“内容”还是...?!
  • 如果你是通过向导(资源字典)创建的,它的设置应该是正确的,你不应该改变它。
  • 我正在使用 VS11,哪个向导?我只是点击了模块并在“Resources”文件夹中添加了一个 ResourceDictionary。
  • 我通常右键单击项目并选择“添加 -> 新项目”,然后您会出现一个对话框(不是真正的向导,抱歉),您可以在其中选择资源字典。看看这个(不仅仅是答案)stackoverflow.com/questions/347614/wpf-image-resources

标签: wpf xaml resourcedictionary


【解决方案1】:

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

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

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

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

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

HTH,
浆果

【讨论】:

  • 同一个程序集,View.Xaml 位于 Views 文件夹中。并且资源位于 Resources 文件夹中。
  • 朋友在我发帖之前我也尝试过“../Resources/mainResX.xaml”,但似乎 UserControl 视图仍然找不到。另外,我会尝试您提供的内容,以提供有关任何进一步内部问题的更详细信息。
【解决方案2】:

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

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

【讨论】:

  • 感谢您的信息,此应用程序可能与您的有所不同,但很高兴知道您的想法,+1,谢谢。
  • 渴望知道您如何根据您的方法处理位于其他程序集中的一些资源?
  • 这与Berryl在他的回答中提到的方法相同。我不确定为什么它对您不起作用,但我现在无法访问我的编码计算机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多