在自定义控件中放置样式
问题描述:
我正在创建自定义控件。并突然面临一个问题:为什么把控制的风格与控制分开? 我的意思是说,使用标准的方法,您必须:从基本控件派生(例如,从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来引用它们。
我想知道的是该解决方案的缺点。我的意思是性能,使用简单等。
答
WPF允许在运行时更改主题,意味着样式应与控件分开存储。而且,当为其他程序员设计自己的自定义样式时,控件应该是无形的,尽管应该有一个默认样式,必须将其独立地存储在Generic.xaml文件中。如果您的应用不支持更改主题,那么您可以根据需要定义样式。
如果您正在编写自定义控件库,我建议您坚持标准。
这里是一个链接,如何将一个自定义的控件创建:
答
除了开发刺猬的回答关于性能,我发现以下缺点:
- Style对象对于每个控制的实例都是自己的。所以你最终得到的是相同Style对象的克隆数量。
- 您无法使用BasedOn属性重写样式。只有完全更换是可能的。
感谢您的回答!请参阅更新#1 –
DynamicResources比StaticResources慢并且应该避免。 –
同意!但在目前的项目中并没有太多的控制措施,而且这种放缓是无形的。 –