1

CustomControlWPF の目的とWPFについて議論しているブログとドキュメントの一部を読みましたがUserControl、以下のように実装についてはまだ混乱しています。

  • これはスタイルと呼ぶべきだと思います。ここでは、またはUserControlではなく、既存のコントロール クラスから継承します。UserControlControl
    <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、コードをテストします。これらは互いに同じように動作するはずです。

  1. UserControlスタイルでは、ここでは ToggleButton であるルート項目のプロパティを設定できますtemplate。そして、これはリソースディレクションでCustomControlテーマを与えられたスタイルと同じだと思います。Style

  2. スタイルではUserControl、静的コンストラクターを追加してメタデータをオーバーライドすることもできます。これにより、次UserControlのようなテーマがサポートされますCustomControl(これが実際に true の場合)。

  3. スタイルではUserControl、デザイナーからの最終的な UI と Visual Studio も CS と相対 XAML を "バインド" することができます。これは便利です。

では、なぜまだ必要なのCustomControlでしょうか? UserControlできないができるだけのものはありCustomControlますか?

4

0 に答える 0