WPFではコントロールに表示する文字列など基本的な動作は、バインディングという方法を使って制御するのが一般的です。
ですが、時にはコントロールをコードから直接操作したい場合もあるでしょう。
そのような場合は、コントロールに名前を付けておくとコードからアクセスする事が出来ます。
コントロールを取得
XAMLで定義したコントロールは x:Name 属性を付けておくと、コード側からその値を使ってコントロールを検索する事が出来ます。
<TextBox x:Name="TestTextBox"/>
XAMLで↑のように定義された場合、コードでは↓のようにしてTextBoxコントロールを取得できます。
TextBox tb = this.FindName("TestTextBox") as TextBox;
if (null != tb)
{
tb.Text = "TEST!";
}
FindNameメソッドのパラメータにx:Name属性の値を渡すとコントロールが取得できます。
指定の名前で見つからない場合はnullが返されます。
名前をそのまま変数名として使えるのでわざわざFindNameを使う事は少ないかもしれないですが・・・
Templateの中のコントロールを取得
<Button x:Name="TestButton">
<Button.Template>
<ControlTemplate>
<Border x:Name="TestBorder" BorderBrush="Red" BorderThickness="1">
<Label>TEST</Label>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
XAMLで↑のようにControlTemplateの中で定義された”TestBorder”のような場合、
コードでは↓のようにしてTemplateのFindNameを使ってコントロールを取得する事ができます。
var border = TestButton.Template.FindName("TestBorder", TestButton) as Border;
if (null != border)
{
border.BorderThickness = new Thickness(1);
}

コメント
コメントを投稿