6

我正在尝试从 WPF 自定义控件库中的其他文件加载 WPF 样式,但我无法在此处加载,这是我的解决方案。

该解决方案包含两个项目

  1. WpfTestControls 类型的 WPF 自定义控件库

  2. WpfTestApp 类型的 WPF 应用程序库,它引用了 WpfTestControls

WPF 应用程序库中的 MainWindow.xaml

<Window.Resources>
    <Style x:Key="TempStyle" TargetType="{x:Type TextBox}">
        <Setter Property="BorderBrush" Value="Green"/>
    </Style>
</Window.Resources>
<Grid>
    <TextBox Height="50px" Width="100px" Style="{DynamicResource TempStyle}"/>
</Grid>

WPF 自定义控件库中的 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="/WpfTestControls;component/TextBoxStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>

WPF 自定义控件库中的 TextBoxStyle.xaml

<ResourceDictionary 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="TempStyle" TargetType="{x:Type TextBox}">
    <Setter Property="BorderBrush" Value="Green"/>
</Style>

我的 AssemblyInfo.cs 文件包含以下内容

[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page, 
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page, 
// app, or any theme specific resource dictionaries))]

但我仍然无法加载样式。如果我使用不使用 Generic.xaml 一切正常,例如以下代码按预期工作

<Window x:Class="WpfTestApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <Style x:Key="TempStyle" TargetType="{x:Type TextBox}">
        <Setter Property="BorderBrush" Value="Green"/>
    </Style>
</Window.Resources>
<Grid>
    <TextBox Height="50px" Width="100px" Style="{StaticResource TempStyle}"/>
</Grid>

我究竟做错了什么 ?提前致谢

4

2 回答 2

6

请为我回答一些问题...

  1. “WPF 自定义控件库”程序集是否与“WpfTestControls”程序集相同?
  2. 如果没有,那么“WPF 自定义控件库”是否引用了“WpfTestControls”程序集?
  3. 您是否WpfTestApp同时引用了“WPF 自定义控件库”和“WpfTestControls”程序集?

如果添加该引用,则资源应正确加载。

我的脚步...

  1. 添加“WPF 自定义控件库”说“ThemesLibray”
  2. 在此在“主题”文件夹下添加两个资源字典

文本框样式.xaml

 <ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="GreenTextBoxStyle" TargetType="{x:Type TextBox}">
       <Setter Property="Background" Value="Green"/>
    </Style>
 </ResourceDictionary>

通用的.xaml

  <ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
         <ResourceDictionary Source="TextBoxStyle.xaml"/>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>
  1. 我有一个主要的启动项目“MyWPFTestApp”,它有程序集引用 ThemesLibray。因为窗口有ThemesLibrary资源以这种方式合并......

    <Window x:Class="MyWPFTestApp.Window7"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window7" Height="300" Width="300">
        <Window.Resources>
            <ResourceDictionary>
               <ResourceDictionary.MergedDictionaries>
                   <ResourceDictionary
                       Source="/ThemseLibrary;component/Themes/Generic.xaml"/>    
               </ResourceDictionary.MergedDictionaries>            
            </ResourceDictionary>
        </Window.Resources>
        <Grid>
            <TextBox Style="{StaticResource GreenTextBoxStyle}"/>
        </Grid>
     </Window>
    

当我启动 MyWPFTestApp 时,我看到带有绿色文本框的窗口。

于 2011-10-14T06:47:07.150 回答
1

主要是:确保您的资源字典的构建操作设置为资源。

于 2015-09-21T05:36:49.393 回答