我已经阅读了一些讨论 WPF 的目的CustomControl
和UserControl
在 WPF 中的博客和文档,但我仍然对以下实现感到困惑:
- 我觉得这应该叫
UserControl
style,这里我继承自一个已有的控件类,不是UserControl
orControl
<ToggleButton x:Class="WpfApplication1.MyButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<ToggleButton.Template>
<ControlTemplate>
... some template code
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
public partial class MyButton : ToggleButton
{
public MyButton()
{
InitializeComponent();
}
}
- 我认为这应该称为
CustomControl
Style
<Style TargetType="{x:Type local:MyButton }">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
... control template code
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
public class MyButton : ToggleButton
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyButton ), new FrameworkPropertyMetadata(typeof(MyButton )));
}
}
在这里,我以两种方式实现了MyBtton
该类,并测试了代码,它们应该彼此一样工作。
在
UserControl
风格上,我可以设置template
根项目的属性,这里是 ToggleButton。而且我认为这与CustomControl
风格相同,它Style
以资源方向为主题。在
UserControl
风格上,我还可以添加静态构造函数并覆盖元数据,这使得UserControl
支持像这样的主题CustomControl
(如果这确实是真的)。在
UserControl
风格上,我可以看到设计器的最终 UI 和 Visual Studio 也将 CS 和相关 XAML“绑定”在一起,这很方便。
那么,为什么我们还需要CustomControl
? 任何UserControl
不能,但只能做的事CustomControl
?