WPF:从数据库/预渲染挂机控制可视性
-
26-09-2019 - |
题
我们有一个相当奇怪的要求:在我们的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;
}
我不喜欢这样的解决方案,但它的工作原理。
不隶属于 StackOverflow