【问题标题】:Access XAML controls from C# code-behind从 C# 代码隐藏访问 XAML 控件
【发布时间】:2012-03-03 19:24:22
【问题描述】:

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

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

作为旁注,.cs 文件只是我引用的 C# 类,而不是 xaml.cs。此外,我知道我可以通过 UserControl 实现这一点,但在这种情况下不能这样做,原因超出了本文的范围。

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

谢谢。

编辑:对此还有其他意见吗?作为一种解决方法,我添加了一个名为 TextBox2_Loaded 的事件处理程序,然后将 e.Source 设置为一个实例变量。然后,在 TextBox1_SelectionChanged 中,我可以访问实例变量。真的很想直接针对控件(例如 TextBox2.IsEnabled)。我一定在某处遗漏了声明或继承。甚至无法使用 FindName 找到控件。

【问题讨论】:

  • 您是否使用 textbox2 作为重复控件的项目(gridview、listview..etc)?
  • 不,我没有使用网格视图或列表视图

标签: c# xaml


【解决方案1】:

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

如果我对此的解释有误,请提供意见。现在,我已经继续添加了一个 Loaded 事件,并将我的 TextBox 控件定义为实例变量,这样我就可以在其他活动发生时访问它们并更改属性。

感谢大家的意见。

【讨论】:

  • 当然,您不能从 DataTemplate 访问命名组件,即使在加载的事件中也是如此。您需要捕获您的认证 UI 组件的实例。
【解决方案2】:

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

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

【讨论】:

  • 由于某种原因我不能使用 TextBox2。 Intellisense 不显示它,编译器认为它是未定义的。我需要从某些东西继承我的类吗?公共部分类自定义:?
  • 尝试进行构建,以便 Studio 可以看到 xaml 编译器将创建的字段。编辑。是的,您的代码应该是与您的 XAML 匹配的部分类。
  • 你确认我对我的类的定义是正确的还是我需要继承一些东西?此外,我已经多次构建了我的项目。
  • 我还考虑过在 _Loaded 事件上定义控件。想法?我现在正在尝试实现这一点。
  • 我不知道这应该如何工作,因为 TextBox2 只是类型名而不是定义的变量。相反,你应该写 't.Text = "Whatever"
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2010-11-03
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多