在自定义控件中放置样式

时间:2013-11-21 09:53:58

标签: wpf wpf-controls

我正在创建自定义控件。突然面临一个问题:为什么要将控制风格与控制分开? 我的意思是使用标准方法你必须:从基本控件派生(例如,从TextBox)并在general.xaml中为它添加样式。 但为什么我们不能这样做:

<TextBox x:Class="CustomTest.CoolTextBox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBox.Style>
        <Style>
            <Setter Property="TextBox.FontSize" Value="20" />
        </Style>
    </TextBox.Style>
</TextBox>

代码隐藏:

public partial class CoolTextBox : TextBox
{
    public CoolTextBox()
    {
        InitializeComponent();
    }
}

更新#1

我不是在编写自己的库,而是在主可执行文件中创建自定义控件。应用支持主题,但它们只有颜色不同。所以每个主题都是一组画笔资源,我的风格将使用 DynamicResource 引用它们。

我想知道的是该解决方案的缺点。我的意思是性能,使用简单等等。

2 个答案:

答案 0 :(得分:1)

WPF允许在运行时更改主题,意味着样式应与控件分开存储。此外,控件在设计时应该是无形的,以便其他程序员可以拥有自定义样式,但某些地方应该有一个默认样式,必须分别存储在Generic.xaml文件中。如果您的应用不支持更改主题,则可以根据需要定义样式。

如果您正在编写自定义控件库,我建议您坚持使用标准。

以下是如何创建自定义控件的链接:

http://wpftutorial.net/HowToCreateACustomControl.html

答案 1 :(得分:0)

除了 dev hedgehog 关于性能的答案之外,我发现了以下缺点:

  1. 样式对象对于控件的每个实例都是拥有的。因此,您最终得到了相同Style对象的克隆数。
  2. 您无法使用BasedOn属性覆盖样式。只能完全替换。