gpt4 book ai didi

WPF:是否可以获取特定附加属性集的所有元素?

转载 作者:行者123 更新时间:2023-12-04 19:51:39 25 4
gpt4 key购买 nike

我创建了一个自定义附加属性,它应该设置在某些不相关的元素上。此附加属性的目的是保持所有这些元素的宽度相同。因此,当这些元素中的任何一个更改宽度时,它应该使用此附加属性集更新所有其他元素。我能够通过 UIPropertyMetadata 设置的“DP 属性更改事件处理程序”跟踪附加属性的更改,因此当任何元素更改宽度时,我将收到该通知。然后我需要做的是更新具有此附加属性集的所有其他元素。

所以我想知道是否可以这样做?有没有办法枚举所有具有特定附加属性集的 DependencyObject 实例?

我想这是一些高级的 WPF 内容,但它是我的 WPF 应用程序中非常具体的特定要求。

最佳答案

您可以枚举可视化树并检查是否为每个元素设置了属性。像这样:

var objectsWithPropertySet = new List<DependencyObject>();
if (RootVisual.ReadLocalValue(FocusIdProperty) != DependencyProperty.UnsetValue)
objectsWithPropertySet.Add(RootVisual);

objectsWithPropertySet.AddRange(RootVisual.GetAllChildren()
.Where(o => o.ReadLocalValue(FocusIdProperty) != DependencyProperty.UnsetValue));

GetAllChildren() 扩展方法是这样实现的:

public static class VisualTreeHelperExtensions
{
public static IEnumerable<DependencyObject> GetAllChildren(this DependencyObject parent)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
// retrieve child at specified index
var directChild = (Visual)VisualTreeHelper.GetChild(parent, i);

// return found child
yield return directChild;

// return all children of the found child
foreach (var nestedChild in directChild.GetAllChildren())
yield return nestedChild;
}
}
}

关于WPF:是否可以获取特定附加属性集的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622970/

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