ControlTemplateにあるWPFコントロールにアクセスする方法は?
-
03-07-2019 - |
質問
通常、WPFコントロールは.xamlファイルで宣言され、コードビハインド(.xaml.csファイル)では宣言されません。ただし、それらを操作するために、コードビハインドでこれらのコントロールの一部を使用する必要がある場合があります。 「常駐」している場合、このようなコントロールのハンドルを取得するにはどうすればよいですか? xamlファイルにありますか?
解決
ControlTemplateクラスのFindName()メソッドを使用できます。
// Finding the grid that is generated by the ControlTemplate of the Button
Grid gridInTemplate = (Grid)myButton1.Template.FindName("grid", myButton1);
他のヒント
あなたが何を求めているのか分からないので、あなたの質問として解釈している両方のインスタンスに答えてみます。
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 =&quot; false&quot;を追加します。
所属していません StackOverflow