[4]実用的なチュートリアルWPFカスタムコントロールのプロパティおよびイベント

1.はじめに:

私は明確な入力ボックスを実証した前回の記事では、このセクションでは、私は、検索ボタンを追加し、いくつかのカスタムプロパティ、およびイベントを追加するための入力ボックスを与えるつもりです、透かしの付いたボタンがあります。Benpianベースのエンジニアリング[3 WPFの実用的なチュートリアル]最終的なプロジェクトを変更します。

2.背景

前回の記事では、我々は以下のようにプロパティの透かしは、ClearTextBoxで追加しました:

上の図から、我々は、このようなカテゴリー、DependencyPropertyに、PropertyMeradataとしていくつかの単語を見ることができます。どこで:

  • カテゴリー装飾文が分類属性に使用され、[]ページのプロパティTAB VS制御の効果の最終プレゼンテーションの内容は、以下に示すよう:

  • DependencyPropertyには、「依存関係プロパティ」と呼ばれ、派生した新しい概念を促進するために、MicrosoftのWPFフレームワーク「プロパティ」のコンセプトに基づいています。簡潔には、属性は、プロパティの従属オブジェクトが「従属オブジェクト(依存関係オブジェクト)と呼ばれる有するデータソースから(他のものに依存して)それ自身の値に頼ることはできないとバインディングプロパティの値を使用することによって得られます。 。 " 伝統的なCLRプロパティと比較すると、多くの依存ノベルティなどの性質がある:追加のメモリオーバーヘッドのオブジェクトインスタンス上の節約は、属性値は、バインディングに依存することができます。---先生孟タイからの声明

ここでは簡単な例では自転車、I(依存オブジェクト)私は車を使用する必要があるとき、私は小さな黄色の車の(バインド)(データを選んだ、車両(依存性)を所有しているを共有することであり、ソース)、I()はメモリのオーバーヘッド保存車を買うためにお金を保存するようにします。PSは:誰かが私は答えた、「あなたは小さな黄色の車を支払うと、それにお金を入金する必要があること、」私のバー与える前に、「私はあなたの幽霊に行ってきました!」

 

注:new演算子を使用して参照使用するDependencyProperty宣言メンバ変数の例としては使用できませんが、DependencyProperty.Registerメソッドを使用して作成しました。

 

  • より詳細な説明については、私はここにいる説明していない、コンセプトのこの部分は、私は後で記事が説明して分離することを説明するために、偉大な長さに非常に重要とニーズです。これも私の研究では、原理を探る、最初に使用されます。私たちは今知っているライン上のおおよその形式でカスタムコントロールでフィールドを宣言する必要があります。

3.エンジニアリング

二つのフィールドの塗りつぶしの色とサイズを追加するアイコンスイープ平文制御3.1

異なるシナリオの下で、時には我々は、アイコンの背景色やサイズが削除され修正される必要があり、私はこのプロジェクトで、現在午前固定値に直接書き込まれ、これは悪いです、のClearTextBox.csに次のように追加してみましょう:

#region 清除图标 属性
[Category("Extend Properties")]
public Brush ClearIconFill
{
  get { return (Brush)GetValue(ClearIconFillProperty); }
  set { SetValue(ClearIconFillProperty, value); }
}

public static readonly DependencyProperty ClearIconFillProperty =
            DependencyProperty.Register("ClearIconFill", typeof(Brush), typeof(ClearTextBox), new PropertyMetadata(Brushes.Gray));

[Category("Extend Properties")]
public Double ClearIconFontSize
{
  get { return (Double)GetValue(ClearIconFontSizeProperty); }
  set { SetValue(ClearIconFontSizeProperty, value); }
}

public static readonly DependencyProperty ClearIconFontSizeProperty =
            DependencyProperty.Register("ClearIconFontSize", typeof(Double), typeof(ClearTextBox));

#endregion

変更ClearTextBox \クリアボタンは、次の図の内容Themes.xamlです。

次に、以下のようClearTextBoxコントロールのプロジェクトMicroUI.Wpf.Samples \ MainWindow.xamlを変更します。

ソリューションを再構築し、次の図を実行します。

私たちは、実際には、すでにカスタムプロパティを見ることができます。

3.2追加検索アイコン

私たちは、コントロールプラス、検索ボタンに戻ってくるとイベントを検索します。

まず、中にスタイルスタイル\ MicroIcon.xamlで検索アイコンを追加

<Style x:Key="MicroBtnIcon_Search" TargetType="{x:Type Button}" BasedOn="{StaticResource MicroBtnIcon}" >
        <Setter Property="Content" Value="&#xe688;" />
</Style>

独自のアイコンとアイコンが可能Unicode値。

その後、矢印の内容を追加し、平文\ Themes.xamlコードを変更します。

以下を高めながら:


<Button x:Name="PART_SearchButtonHost" Grid.Column="3" 
  Padding="2,0"
  Style="{StaticResource MicroBtnIcon_Search}"  
  FontSize="20"
  />

下に示すように、ソリューション、実行を再構築します。

また、検索ボタンを見ることができます。ここで私は、前のセクションで説明した方法に従って、[検索]ボタンが二つのフィールドの塗りつぶしの色とサイズを追加します。

#region 搜索图标 属性
[Category("Extend Properties")]
public Brush SaerchIconFill
{
  get { return (Brush)GetValue(SaerchIconFillProperty); }
  set { SetValue(SaerchIconFillProperty, value); }
}

public static readonly DependencyProperty SaerchIconFillProperty =
  DependencyProperty.Register("SaerchIconFill", typeof(Brush), typeof(ClearTextBox), new PropertyMetadata(Brushes.Gray));

[Category("Extend Properties")]
public Double SaerchIconFontSize
{
   get { return (Double)GetValue(SaerchIconFontSizeProperty); }
   set { SetValue(SaerchIconFontSizeProperty, value); }
}

public static readonly DependencyProperty SaerchIconFontSizeProperty =
  DependencyProperty.Register("SaerchIconFontSize", typeof(Double), typeof(ClearTextBox));

#endregion

変更ClearTextBox \ [検索]ボタンのコンテンツThemes.xaml次のように:

修正MicroUI.Wpf.SamplesはClearTextBoxは以下のMainWindow.xaml:

ソリューション、実行を再構築します。

この時点で、スタイルはまだ可能です。

3.3の追加カスタムイベント

次に、我々は、カスタム検索ボタンにイベントを追加し、ユーザーが検索ロジックを実行するためにクリックイベントをサブスクライブすることができます。

図ClearTextBox.csに二つの矢印を追加します。

 

また、ファイルに追加します。

#region 自定义按钮事件
        
[Category("Behavior")]
public static readonly RoutedEvent OnSearchEvent =
  EventManager.RegisterRoutedEvent(
  "OnSearch",
  RoutingStrategy.Bubble,
  typeof(RoutedEventHandler),
  typeof(ClearTextBox));
public event RoutedEventHandler OnSearch
{
  add { AddHandler(OnSearchEvent, value); }
  remove { RemoveHandler(OnSearchEvent, value); }
}
#endregion

イベントハンドラメソッドを追加していきます。


//搜索按钮处理方法
private void HandleOnSearchClick(object sender, RoutedEventArgs e)
{
  this.RaiseEvent(new RoutedEventArgs(ClearTextBox.OnSearchEvent, this));
}

OnApplyTemplate()メソッドに次のステートメントを追加します。


if (searchButtonHost != null)
{
  searchButtonHost.Click -= HandleOnSearchClick;
}
searchButtonHost = GetTemplateChild("PART_SearchButtonHost") as ButtonBase;
if (searchButtonHost != null)
{
  searchButtonHost.Click += HandleOnSearchClick;
}

完了この時点追加カスタムコンテンツでは、次はMainWindow.xamlサブスクリプションのイベントを追加します。

次のようにイベントハンドラメソッドでMainWindow.xaml.csは、次のとおりです。

ソリューション、実行を再構築します。

私は、サブスクライブイベントがトリガされ見ることができます。

3.4節

Benpianはポイントによって学習することができます。

  • カスタム依存関係プロパティを追加します

  • カスタムコントロールのカスタムイベントを追加

////////////////////////////////////////////////// ///////////////////////////////////////

**元の記事には、再現し、宣言部を添付してください

**出典:https://blog.csdn.net/mybelief321

**著者:ナインゼロ荘

////////////////////////////////////////////////// ///////////////////////////////////////

公開された143元の記事 ウォンの賞賛161 ビュー121万+

おすすめ

転載: blog.csdn.net/mybelief321/article/details/102776121
おすすめ