可以以某种方式隐藏(从设计器属性窗格)自定义画布上的子控件上的预先存在的依赖项属性,或修改其元数据,或使它们成为只读?
以下是我要完成的内容的详细信息:
我正在编写一个类似WPF Canvas的控件,它具有自定义规则来放置,调整和旋转它的子项。
<my:MyCustomCanvas>
<Button my:Name="child control #1" Canvas.Left="10" Canvas.Top="20"/>
<my:SomeOtherControl my:Name="child control #2" Canvas.Left="70" Canvas.Top="80"/>
</my:MyCustomCanvas>
示例#1:
HorizontalAlignmentProperty在普通画布中没有任何意义,但它的子画面仍然在它们的属性窗格上显示它 - 它从FrameworkElement一直继承。这会使使用我的画布的人感到困惑,因为布局属性看起来很麻烦,因为它们在那里但不起作用。
更改某些继承属性的默认值也很不错。
示例#2:
要旋转子控件,我需要像这样设置RenderTransformProperty:
protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
{
base.OnVisualChildrenChanged(visualAdded, visualRemoved);
foreach (UIElement child in InternalChildren)
{
var group = new TransformGroup();
var rt = new RotateTransform();
var b = new Binding() { Source = ..., Convertor = ... };
BindingOperations.SetBinding(rt, RotateTransform.AngleProperty, b);
group.Children.Add(rt);
child.RenderTransform = group;
}
}
如果有人因任何原因设置或重置RenderTranformProperty,我的绑定将被删除,唯一的恢复方法是关闭并重新打开设计器窗口/标签。
还有一个问题,设计师本身会删除我的绑定,但这是另一个问题的主题
这一切都意味着我需要告诉所有人(并且他们需要记住)不要在我的画布中触摸RenderTranform - 否则一切都会出现故障。这很痛苦,所以知道如何在设计器的属性窗格中隐藏子控件的RenderTransform,或者禁止更改它们。