CustomControl
WPF の目的とWPFについて議論しているブログとドキュメントの一部を読みましたがUserControl
、以下のように実装についてはまだ混乱しています。
- これはスタイルと呼ぶべきだと思います。ここでは、または
UserControl
ではなく、既存のコントロール クラスから継承します。UserControl
Control
<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 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
スタイルでは、ここでは ToggleButton であるルート項目のプロパティを設定できますtemplate
。そして、これはリソースディレクションでCustomControl
テーマを与えられたスタイルと同じだと思います。Style
スタイルでは
UserControl
、静的コンストラクターを追加してメタデータをオーバーライドすることもできます。これにより、次UserControl
のようなテーマがサポートされますCustomControl
(これが実際に true の場合)。スタイルでは
UserControl
、デザイナーからの最終的な UI と Visual Studio も CS と相対 XAML を "バインド" することができます。これは便利です。
では、なぜまだ必要なのCustomControl
でしょうか? UserControl
できないができるだけのものはありCustomControl
ますか?