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); }
コメントをお書きください