0

クラスのプロパティの値に応じて、Adorner を非表示/表示することはできますか?

この目的のために添付プロパティを使用する必要がありますか?

もしそうなら、アドナーの可視性をどのように正確に制御できますか。手動で削除/依存オブジェクトの OnChanged イベント内の Adorner Layer に追加する必要がありますか?

これは、私がやろうとしていることの非常に簡単なコード表現です:

(: それが正しい方法であるかどうかさえわかりません。ビジネス モデルのコードによって変更されるプロパティの値によって Adorner の可視性を制御したいと考えています。添付プロパティの問題は、ビジネス ドメインのコードではなく、プロパティの値を更新するのはコントロールの責任です。)

public static class IsValidBehavior
{
    public static readonly DependencyProperty IsValidProperty = DependencyProperty.RegisterAttached("IsValid",
                                                                    typeof(bool),
                                                                    typeof(IsValidBehavior),
                                                                    new UIPropertyMetadata(false, OnIsValidChanged));

    public static bool GetIsValid(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsValidProperty);
    }
    public static void SetIsValid(DependencyObject obj, bool value)
    {
        obj.SetValue(IsValidProperty, value);
    }

    private static void OnIsValidChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
    {
        UIElement element = dependencyObject as UIElement;

        if (element == null)
            return;

        if ((bool)e.NewValue == true)
        {
            // Display the Adorner
        }
        else
        {
            // Hide the Adorner
        }
    }
}
4

1 に答える 1

3

さて、私があなたの質問を正しく理解していれば、WPFコードまたはXAML. コードからは、多かれ少なかれ既に行っていることですが、XAML では次のようなことができると思います。

Visibility="{Binding Path=MyVisibilityVariant, 
       Converter={StaticResource VisibilityConverter}}

言い換えれば、それを何らかのプロパティにバインドします。私の一般的な提案: いくつかのバリアントを考慮して、可能な限り XAML を使用することです。

  • XAML 宣言により、ソフトウェアは非常にスケーラブルになりますが、より複雑になります (ソリューションが利用可能であるだけでなく、コード ビハインドで何らかの方法で処理を行うことが最善であると考えてください)。

  • 締め切りを考慮してください。XAML の実装/デバッグ/修正に、コードよりも多くの時間を費やすことになります。

編集

XAML で定義できるようにするためのカスタム Adorder の定義

于 2011-09-18T17:19:09.970 に答える