1

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

.

以下是有关我要完成的工作的详细信息

我正在编写一个类似 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,或者禁止更改它们。

4

0 回答 0