WPF: التحكم في الرؤية من قاعدة البيانات / خطاف Prerender

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

سؤال

لدينا شرط غريب إلى حد ما: ستكون رؤية أي تحكم في تطبيق WPF الخاص بنا مدفوعًا بتجارة قاعدة البيانات.

هذا يعني أن لدينا جدولًا يخزن اسم العنصر وحضوره.

أنا الآن أبحث عن طريقة أنيقة لتنفيذ هذه الميزة على جانب العميل.

يمكنني إنشاء USERCONTROL الخاص بي والورث منه في كل مكان ، مما يوفر طريقة قالب initializeComponent. ولكن ماذا لو أضاف شخص ما المزيد من المشاركات المبرمجة؟

لا أريد أن تعرف أدوات التحكم عن هذه الآلية على الإطلاق. أريد ربط/الاعتراض عند نقطة معينة (تقديم تحكم ما قبل) وضبط رؤية عنصر التحكم وفقًا لقاعدة البيانات.

هل هذا ممكن بطريقة ما؟ وإذا لم يكن كذلك ، كيف يمكنك تصميمه؟

هل كانت مفيدة؟

المحلول

إذن هذا ما فعلته:

لقد ورثت من USERCONTROL ووضع الشيك في eventHandler للحدث المحمّل.

ثم أترك عناصر التحكم الخاصة بي ترث من CustomControl الخاص بي ، وهذا يعمل بشكل جيد.

لن يجد تطبيق FindName () الإطارات لسبب ما لا أعرفه ، على الرغم من أن أسمائها محددة في XAML. لذا ، إليك الروتين الذي أستخدمه للعثور على الأطفال بأسمائهم:

    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