我们有一个相当奇怪的要求:在我们的WPF的应用程序的任何控制的可见性,以通过一个数据库表被驱动

这意味着我们有一个表,该表存储了元素的名称和其可视性。

现在我正在寻找实现客户端上的这一特性一种优雅的方式。

我可以从它创建自己的用户控件和继承随处可见,提供的InitializeComponent模板方法。但是,如果有人编程增加了更多的childcontrols?

我不希望我的控制,以了解这种机制的。我想在某一点(预控制渲染)中/截距钩住并根据数据库调整控制的可见度。

这个现象的原因可能吗?如果没有,你会如何设计呢?

有帮助吗?

解决方案

因此,这里是我做过什么:

我从用户控件继承,并把检查的一个EventHandler为Loaded事件。

然后我让我的控件从我CustomControl继承,这工作得很好。

在FindName()实现不会找到某种原因,我不知道FrameworkElements,虽然他们的名字在XAML定义。因此,这里是我日常使用他们的名字,找到孩子:

    public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            string controlName = child.GetValue(Control.NameProperty) as string;

            if (controlName == name)
            {
                return child as T;
            }
            else
            {
                T result = FindVisualChildByName<T>(child, name);
                if (result != null)
                {
                    return result;
                }
            }
        }

        return null;
    }

我不喜欢这样的解决方案,但它的工作原理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top