【问题标题】:Access to UIElement.Properties in a List<UIElement>访问 List<UIElement> 中的 UIElement.Properties
【发布时间】:2013-08-21 11:30:15
【问题描述】:

我在运行时创建了多个Canvas,每个Canvas 都有一个TextBox 作为子级。这些Canvas 是WrapPanel 的子代。我的代码如下:

List<Canvas> cvList = new List<Canvas>();
WrapPanel wp = new WrapPanel();

// function (e.g. a Click event) to add a Canvas with a TextBox
Canvas cv = new Canvas();
TextBox tb = new TextBox();
cv.Children.Add(tb);
cvList.Add(cv);
wp.Children.Add(cv);

如果函数处理 10 次并创建 10 个 Canvas,我需要更改一个特定 UIElement(例如第 5 个 TextBox)的 Text。我该怎么做?在数组中没有像这样使用的索引。

[编辑] 如果我在运行时也生成了一个按钮单击事件,每个按钮都会关闭其对应的 Canvas:

List<Button> btnList = new List<Button>();

// function to add Canvas with a Button
Button btn = new Button();
btn.Content = "Destroy";
btn.Click += destroy_Click;
btnList.Add(btn);
cv.Children.Add(btn);

// Destroy click event
private void destroy_Click(object sender, RoutedEventArgs e)
{
if (sender == ????)
{}
}

我应该将我的发件人与什么进行比较?

【问题讨论】:

  • "在数组中没有像这样使用的索引。"就在这里。 List 有一个 完全 类似数组的索引:cvList[4]。 UIElementCollection 也是如此(Canvas.Children 就是这样):cvList[4].Children[0].

标签: c# wpf arrays list uielement


【解决方案1】:

正如我试图在您的 last question(您可能应该更新)中解释的那样,您不需要单独的列表,只需使用 WrapPanel 直接访问其子级 - 您知道您只添加了 @ 987654323@ 元素添加到您的 WrapPanel 以便您可以适当地进行转换:

TextBox textbox = (wp.Children[5] as Canvas).Children[0] as TextBox;
textbox.Text = "Hello";

【讨论】:

  • 谢谢,我认为将问题分开会更合适。我还编辑了我的问题,以解释我在列表中的 UIElement 的单击事件中遇到的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多