从C#代码隐藏访问XAML控件

时间:2012-03-03 19:24:23

标签: c# xaml

我的VS项目中有两个文件:Custom.xamlCustom.cs

在我的 XAML 文件中,我有以下文本框:

<TextBox x:Name="TextBox1" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox1_SelectionChanged" />

<TextBox x:Name="TextBox2" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox2_SelectionChanged" />

在我的 .cs 中,我有以下方法:

 void TextBox1_SelectionChanged(object sender, RoutedEventArgs e)
 {
     TextBox t = e.Source as TextBox
 }

我可以成功点击上面的事件处理程序。然后,我可以使用TextBox1抓取e.Source及其属性,但我想访问TextBox2及其属性。

作为旁注, .cs 文件只是我引用的C#类,而不是 xaml.cs 。另外,我了解我可以通过 UserControl 实现此功能,但由于本帖子范围之外的原因,无法在此方案中执行此操作。

请告知我如何获取/设置TextBox2的属性。

感谢。

编辑:关于此的任何其他输入?作为一种解决方法,我添加了一个名为TextBox2_Loaded的事件处理程序,然后将e.Source设置为实例变量。然后,在TextBox1_SelectionChanged中,我可以访问实例变量。真的想直接定位控件(例如TextBox2.IsEnabled)。我必须在某个地方错过声明或继承。甚至无法使用FindName找到控件。

3 个答案:

答案 0 :(得分:3)

只要您在XAML中设置了名称,就可以直接通过名称访问它(XAML编译器将为您创建一个实例变量。)

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
    TextBox2.Text = "Whatever";
} 

答案 1 :(得分:3)

好吧,所以我显然在这篇文章中遗漏了一个关键组件......我的TextBox控件位于DataTemplate控件中。根据我的研究,在DataTemplate控件内部时无法访问TextBox控件。我真的不认为这很重要,但我想当这种情况存在时,不会创建实例变量。

如果我的解释不正确,请提供输入。现在,我已经继续添加了一个Loaded事件并将我的TextBox控件定义为实例变量,以便我可以访问它们并在发生其他活动时更改属性。

感谢大家的投入。

答案 2 :(得分:1)

这恰好发生在我身上。我不得不关闭我的解决方案并重新打开它。