【问题标题】:c# xaml selecting controls using Namec# xaml 使用名称选择控件
【发布时间】:2014-06-12 06:16:48
【问题描述】:

我在 VS2013 C# 中有以下调度例程:

private void B_Click(object sender, RoutedEventArgs e)
{
    Button btn = (Button)sender;
    string src = btn.Name.ToString();
    string foo = "G" + src.Substring(1);

    G0.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}

它当前改变了 G0 的可见性。我想更改代码,以便如果按下按钮 B123,则更改 G123.Visibility。

谢谢, 丹

注意:这是按钮的通用事件处理程序。有 100 个按钮,因此每个按钮的单独处理程序是不切实际的。它也可以是下拉列表或文本框中的处理程序。 G123 是 XAML 页面上的随机控件。关键是,给定一个包含名称的字符串,如何找到关联的控件以便修改其属性?

【问题讨论】:

  • 为您的按钮创建一个事件处理程序并编写代码?
  • 使用FindName
  • 所以如果我理解正确的话,当用户按下标记为 Bxxx 的按钮时,您想要更改相应控件 Gxxx 的可见性,其中 xxx 是与控件名称关联的数字。为什么不能只绑定 xaml 中的每个可见性?还是您只是希望有一个集中的位置?

标签: c# xaml controls


【解决方案1】:

我不确定我是否正确理解了您的问题,所以我可能会猜测按钮按钮 B123 和 G123 是否通过数字 123 相互关联。一般来说,我想您想更改按钮的可见性GX 如果按钮 BX 被改变。 为了找到窗口中的所有控件,请查看 Bryce Kahle 提供的解决方案,请参阅Find all controls in WPF Window by type。在您的 buttenclick 句柄中,执行类似

的操作
private void B_Click(object sender, RoutedEventArgs e)
{
   Button btn = (Button)sender;
   string src = btn.Name.ToString();
   string identifier= src.Substring(1);

   foreach (var btn in FindVisualChildren<Button>(this).Where(b => b.Name.EndsWith(identifier)))
   {
      if(btn.Name.StartsWith("G"))
        btn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
   }
}

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    在 cmets 中,用户 Clemens 给出了答案。 (由于他没有给出答案,我无法投票。)

    使用 FindName,我能够获得所需控件的属性:

    private void B_Click(object sender, RoutedEventArgs e)
    {
        Button btn = (Button)sender;
        string src = btn.Name.ToString();
        string foo = "G" + src.Substring(1);
        Windows.UI.Xaml.Shapes.Rectangle rect = (Windows.UI.Xaml.Shapes.Rectangle)this.FindName(foo);
        rect.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    }
    

    这具有灵活性,因此我可以更改指定控件的填充、内容、文本、前景、样式等。比我简单地使用 XAML 绑定更多的控制。

    谢谢克莱门斯,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多