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