2012-03-03 57 views
6

我在VS项目中的两个文件:Custom.xamlCustom.cs访问XAML从C#隐藏代码控制

在我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 
} 

我可以帅客完美地击中上面的事件处理程序。然后,我可以通过使用e.Source来获取TextBox1及其属性,但我想访问TextBox2及其属性。

一点题外话,在的.cs文件只是一个C#类,我引用,而不是一个xaml.cs。另外,据我所知,我可以通过UserControl来实现此功能,但由于本篇文章范围之外的原因,在这种情况下不能这样做。

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

谢谢。

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

+0

你是否使用textbox2作为重复控件(gridview,listview..etc)的项目? – 2012-03-03 19:30:50

+0

不,我没有使用gridview或listview – Josh 2012-03-03 19:43:11

回答

3

好了,所以我显然已经离开了这篇文章中的关键组件... My TextBox控件位于DataTemplate控件的内部。从我的研究中,在DataTemplate控件内部无法访问TextBox控件。我真的不认为这很重要,但我猜这个场景存在时不会创建实例变量。

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

感谢大家的意见。

+0

当然,即使在加载的事件中,您也无法从DataTemplate访问命名组件。 您需要捕获您的cerated UI组件的实例。 – Ouarzy 2013-02-13 08:19:02

3

只要您设置了namein的XAML,你可以直接按名称访问它(XAML编译器会为你创建一个实例变量。)

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

由于某些原因,我不能使用TextBox2。 Intellisense不显示它,编译器认为它是未定义的。我需要继承我的课程吗?公共分类自定义:? – Josh 2012-03-03 19:42:52

+0

尝试进行构建,以便Studio可以看到xaml编译器将创建的字段。编辑。是的,您的代码应该是与您的XAML匹配的部分类。 – GazTheDestroyer 2012-03-03 19:45:48

+0

您是否确定我对我班的定义是正确的,还是我需要继承某些东西?另外,我已经多次构建了我的项目。 – Josh 2012-03-03 19:58:48

0

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