AssociatedObject.FindName في Silverlight سلوك onattached إرجاع لاغية

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

  •  23-09-2019
  •  | 
  •  

سؤال

أقوم بعمل سلوك Silverlight لتمكين سحب عنصر بعنصر "مقبض السحب" (بدلاً من العنصر بأكمله قابل للسحب). فكر في الأمر مثل شريط عنوان النافذة.

في طريقة onattached أنا أتصل: AssociatedObject.FindName (DragHandle) ولكن هذا يعود فارغة.

ثم حاولت التعامل مع الحدث المحمّل لـ AssociatedObject وتشغيل الكود الخاص بي هناك ، لكنني ما زلت أحصل على عودة خالية.

هل أسيء فهم ما الذي يمكن أن يفعله FindName؟ يوجد AssociatedObject في عناصر Control (أريد مجموعة من العناصر القابلة للسحب). فهل هناك نوع من مشكلة حلمي الأسماء؟

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

المحلول

نعم ، يبدو الأمر وكأنه مشكلة في حيد الأسماء. ال وثائق MSDN على أسماء XAML يتجول في كيفية تعريف Namesopes للقوالب وعناصر التحكم في العناصر. هل تستخدم قالبًا للعناصر الموجودة في العناصر الخاصة بك؟

قد تضطر فقط إلى المشي على الشجرة المرئية بشكل متكرر بشيء من هذا القبيل للعثور على العنصر الصحيح بالاسم:

    private static FrameworkElement FindChildByName(FrameworkElement parent, string name)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            FrameworkElement child = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;

            if (child != null && child.Name == name)
            {
                return child;
            }
            else
            {
                FrameworkElement grandChild = FindChildByName(child, name);

                if (grandChild != null)
                {
                    return grandChild;
                }
            }
        }

        return null;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top