1

我已经阅读了一些讨论 WPF 的目的CustomControlUserControl在 WPF 中的博客和文档,但我仍然对以下实现感到困惑:

  • 我觉得这应该叫UserControlstyle,这里我继承自一个已有的控件类,不是UserControlorControl
    <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();
        }
    }
  • 我认为这应该称为CustomControlStyle
    <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该类,并测试了代码,它们应该彼此一样工作。

  1. UserControl风格上,我可以设置template根项目的属性,这里是 ToggleButton。而且我认为这与CustomControl风格相同,它Style以资源方向为主题。

  2. UserControl风格上,我还可以添加静态构造函数并覆盖元数据,这使得UserControl支持像这样的主题CustomControl(如果这确实是真的)。

  3. UserControl风格上,我可以看到设计器的最终 UI 和 Visual Studio 也将 CS 和相关 XAML“绑定”在一起,这很方便。

那么,为什么我们还需要CustomControl? 任何UserControl不能,但只能做的事CustomControl

4

0 回答 0