WPF中的可编辑用户控件

时间:2009-02-23 11:24:47

标签: wpf user-controls themes

如何在WPF中创建具有基本默认样式的UserControl,但也可以在需要时轻松主题化?

您是否有一些很好的指南,博客条目或解释此特定主题的示例?

提前谢谢你, 马可

2 个答案:

答案 0 :(得分:7)

在WPF中,主题只是一组XAML文件,每个文件都包含 ResourceDictionary ,其中包含适用于控件的样式模板定义在应用程序中使用。主题文件可能如下所示:

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:uc="clr-namespace:MyApp.UserControls">

  <!-- Standard look for MyUserControl -->
  <Style x:Key="Standard" TargetType="{x:Type uc:MyUserControl}">
    <Setter Property="Width" Value="22" />
    <Setter Property="Height" Value="10" />
  </Style>

</ResourceDictionary>

必须通过向程序集添加以下属性来显式启用对WPF应用程序中的主题的支持:

[assembly: ThemeInfo(
  ResourceDictionary.None,
  ResourceDictionaryLocation.SourceAssembly
 )]

这将指示WPF查找名为 themes \ generic.xaml 嵌入式资源文件,以确定应用程序控件的默认外观。

请注意,当特定于主题的词典包含单独的文件而不是应用程序的程序集时,样式和模板资源必须使用组合键,它告诉WPF哪个程序集包含样式/模板适用的控件。因此,上一个示例应修改为:

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:uc="clr-namespace:MyApp.UserControls;assembly=MyApp">

  <!-- Standard look for MyUserControl in the MyApp assembly -->
  <Style x:Key="{ComponentResourceKey {x:Type uc:MyUserControl}, Standard}">
    <Setter Property="Width" Value="22" />
    <Setter Property="Height" Value="10" />
  </Style>

</ResourceDictionary>

答案 1 :(得分:1)

看看这篇文章:http://msdn.microsoft.com/en-us/magazine/cc135986.aspx

它讨论了如何编写一个可以使用ControlTemplate更改的控件,比如内置控件。