gpt4 book ai didi

WPF - 如何检测何时添加了新的 Visual 子元素?

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

基于一些自定义安全设置,我将窗口子控件更改为只读和禁用。为此,我在窗口加载时循环遍历子控件。

这工作得很好。 99% 完美。

在我的窗口中,我有一个 ItemsControl,其内容基于 ComboBox。更改 ComboBox,ItemsControl 中的子控件再次数据绑定(bind)。但是,安全性(只读/禁用)不再是真的。

在你跳到解决方案之前,我知道我可以处理 ComboBox changed 事件;但是,我有很多这样的盒子,并且无论我的开发人员向窗口/表单添加什么,我都没有一个通用的解决方案可以在窗口级别应用(想想:基础)。

我的问题(对不起,长时间的引导)是,我如何检测由于某些动态事件(如数据绑定(bind))而将新 child 添加到窗口的时间?是否有 NewChildAdded 事件?是否有 DataBindingJustChangedThings 事件?

一定有什么事。

如果您的解决方案包含计时器,则无需回复。我的表单太复杂了,无法处理额外的负载 - 滴答之间的延迟实在是一个安全问题。

您可能在想,只需将外部容器设置为只读或禁用即可。但这会对扩展器、多行文本框和列表框等内容产生负面影响。这种方法不够细化。当然,这是我们之前开始迭代的地方。

如果您的解决方案包含样式,则需要包括我如何在每个控件的基础上覆盖您的方法。某些控件(如复选框)无法禁用,因为它们在 UI 布局中有用途。

很抱歉有限制,但我计划在生产中使用该解决方案。

谢谢你。

最佳答案

你试过OnVisualChildrenChanged ?

    /// <summary>
/// Handle visual children being added or removed
/// </summary>
/// <param name="visualAdded">Visual child added</param>
/// <param name="visualRemoved">Visual child removed</param>
protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
{
// Track when objects are added and removed
if (visualAdded != null)
{
// Do stuff with the added object
}
if (visualRemoved != null)
{
// Do stuff with the removed object
}

// Call base function
base.OnVisualChildrenChanged(visualAdded, visualRemoved);
}

关于WPF - 如何检测何时添加了新的 Visual 子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024213/

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