WPF:データベース/事前レンダリングフックからコントロールの可視性

StackOverflow https://stackoverflow.com/questions/3414240

質問

私達持っている奇妙な要件:。私たちのWPF-アプリケーションでの任意のコントロールの可視性は、データベース・テーブルによって駆動される。

ということは、私たちはどの店舗要素の名前とその可視性テーブルを持っています。

今私は、クライアント側でこの機能を実装するためのエレガントな方法を探しています。

私は、InitializeComponentのテンプレートメソッドを提供し、どこでも、そこから自分のユーザーコントロールと継承を作成することができます。しかし、誰かがプログラムよりchildcontrolsを追加する場合はどうなりますか?

私は自分のコントロールがすべてで、このメカニズムについて知っている必要はありません。私は、特定の時点(前制御レンダリング)でIN /インターセプトフックおよびデータベースに応じた制御の可視性を調整する。

何とか可能ということですか?そうでない場合、どのようにそれを設計するのでしょうか?

役に立ちましたか?

解決

だからここに私がやったことです。

私はUserControlから継承され、LoadedイベントのためのEventHandlerにチェックを入れます。

私は、これはかなりうまく動作しますが、私のコントロールは私のCustomControlから継承させます。

その名前は、XAMLで定義されていますが、

FindName指定()の実装では、私は知らない何らかの理由でFrameworkElementsを見つけることができません。そこでここではその名前で子供を見つけるためのルーチンIの使用は次のとおりです。

    public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            string controlName = child.GetValue(Control.NameProperty) as string;

            if (controlName == name)
            {
                return child as T;
            }
            else
            {
                T result = FindVisualChildByName<T>(child, name);
                if (result != null)
                {
                    return result;
                }
            }
        }

        return null;
    }

私は、このソリューション好きではないが、それは動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top