web-dev-qa-db-ja.com

ControlTemplateにあるWPFコントロールにアクセスするにはどうすればよいですか?

通常、WPFコントロールは、コードビハインド(.xaml.csファイル)ではなく、.xamlファイルで宣言されます。ただし、これらのコントロールを操作するために、コードビハインドでこれらのコントロールの一部を使用する必要がある場合があります。 xamlファイルに「存在する」場合、このようなコントロールのハンドルを取得するにはどうすればよいですか?

24
Abtin

ControlTemplateクラスのFindName()メソッドを使用できます。

// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);
33
CSharper

あなたが何を求めているのかわからないので、私があなたの質問として解釈している両方の事例に答えようとします。

1)明示的なコントロールを宣言し、それを直接編集する場合は、次のようにnameプロパティを設定するだけです。

<Canvas x:Name="myCanvas"/>

次に、名前を使用してキャンバスにアクセスできます。

myCanvas.Background = Brushes.Blue;

2)汎用コントロールを宣言し、それを複数回使用する場合は、次のように実行できます。

<Window>
   <Window.Resources>
      <Ellipse x:Key="myEllipse" Height="10" Width="10">
   </Window.Resources>
</Window>

次に、コードで次の構文を使用して、事前定義されたコントロールにアクセスできます。

Ellipse tempEllipse = (Ellipse)FindResource("MyEllipse");

リソースを複数のコントロールのテンプレートとして使用する場合は、x:Shared = "false"を追加します。

4
Drew McGhie