WPF - 有没有办法从 Canvas.Children 中删除特定的 child ?

标签 wpf canvas wpf-controls

我正在研究一个图表控件,我正在绘制“分析范围”,它只是图表上的两条垂直线。当我想更改分析范围时会出现问题,因为我不知道如何仅删除两条分析范围线,因此我最终清除了图表并再次绘制了实际数据值等等。有没有办法标记这些 UI 元素(即分析范围是网格线 UI 元素),以便我可以专门删除它们?我想我可以将 UI 元素的“索引”保存在某处并删除它们,但我想知道是否有更简洁的方法来做到这一点。非常感谢。

最佳答案

全部 UIElement s 有一个 UID,它是一个字符串。您可以将范围线的 UID 设置为可预测的值。请记住,UID 必须是唯一的。然后,当您只需要删除网格线时,您可以遍历 Children 集合,收集需要删除的 UI 元素列表,然后将其删除。

像这样的东西:

Canvas c = new Canvas();
c.Children.Add( new UIElement() { Uid = "Line1" } );
c.Children.Add( new UIElement() { Uid = "Line2" } );
c.Children.Add( new UIElement() { Uid = "Line3" } );
c.Children.Add( new UIElement() { Uid = "Text1" } ); //This is added as a sample

List<UIElement> itemstoremove = new List<UIElement>();
foreach (UIElement ui in c.Children)
{
  if (ui.Uid.StartsWith("Line"))
  {
    itemstoremove.Add(ui);
  }
}
foreach (UIElement ui in itemstoremove)
{
  c.Children.Remove(ui);
}

那应该工作。在调试中对此代码的快速测试显示 Children 计数为 1,只有 UIElement列表中存在 Text1 的 Uid。

关于WPF - 有没有办法从 Canvas.Children 中删除特定的 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4280176/

相关文章:

.net - 新的 Windows 应用程序 - 什么语言?

c# - 按下 Windows 修饰键时,Keyboard.Modifiers 为 None

javascript - 在 iPad 上使用 Javascript 加载大图像和图 block

c# - ContentControl 换行问题

WPF 用户控件的 DataContext 为 Null

c# - 想要一个按钮在点击后禁用 30 秒并自动启用

wpf - 双击Tab Control中的TabItem,View会弹出 float 窗口

javascript - 无法使用 Javascript 访问 Polymer 自定义元素内的 Canvas 元素

javascript - 碰撞后计算 Angular 速度

c# - 如何在wpf应用程序中显示转换为xaml flowdocument的html内容