gpt4 book ai didi

wpf - 在运行时添加和删除 WPF UIElements

转载 作者:行者123 更新时间:2023-12-04 15:45:34 28 4
gpt4 key购买 nike

有没有办法对 UIElements 进行逻辑分组或标记,例如在运行时添加的形状和控件以便于删除?

例如,我有一个 Grid带有一些(设计时)子元素并添加椭圆和 TextBlock s 到它在运行时。当我想绘制一组不同的椭圆和 TextBlock 时s,我想删除我添加的原始集。在添加它们的同时对它们进行逻辑分组的简单方法是什么,这样我就可以有一个 children.clear() 或某种方法来识别它们以删除它们?

可以添加标记值,但在遍历控件的子控件时无法检索或读取它,因为它们的类型是 UIElement它没有标签属性。

想法?

最佳答案

一个使用 Attached Property 的好地方.
例子:

// Create an attached property named `GroupID`
public static class UIElementExtensions
{
public static Int32 GetGroupID(DependencyObject obj)
{
return (Int32)obj.GetValue(GroupIDProperty);
}

public static void SetGroupID(DependencyObject obj, Int32 value)
{
obj.SetValue(GroupIDProperty, value);
}

// Using a DependencyProperty as the backing store for GroupID. This enables animation, styling, binding, etc...
public static readonly DependencyProperty GroupIDProperty =
DependencyProperty.RegisterAttached("GroupID", typeof(Int32), typeof(UIElementExtensions), new UIPropertyMetadata(null));
}
用法:
public void AddChild(UIElement element, Int32 groupID)
{
UIElementExtensions.SetGroupID(element, groupID);
rootPanel.Children.Add(element);
}

public void RemoveChildrenWithGroupID(Int32 groupID)
{
var childrenToRemove = rootPanel.Children.OfType<UIElement>().
Where(c => UIElementExtensions.GetGroupID(c) == groupID);

foreach (var child in childrenToRemove)
{
rootPanel.Children.Remove(child);
}
}

关于wpf - 在运行时添加和删除 WPF UIElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479532/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com