在设计时隐藏或重新声明子WPF控件的继承DependencyProperty

时间:2015-06-27 11:30:58

标签: wpf canvas attached-properties design-time rendertransform

可以以某种方式隐藏(从设计器属性窗格)自定义画布上的子控件上的预先存在的依赖项属性,或修改其元数据,或使它们成为只读?

以下是我要完成的内容的详细信息

我正在编写一个类似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:

Horizo​​ntalAlignmentProperty在普通画布中没有任何意义,但它的子画面仍然在它们的属性窗格上显示它 - 它从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,或者禁止更改它们。

0 个答案:

没有答案