هل يمكنك تحريك خاصية تبعية مخصصة في Silverlight؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

ربما أفتقد شيئًا واضحًا حقًا.أحاول كتابة لوحة مخصصة حيث يتم وضع المحتويات وفقًا لبعض خصائص التبعية (أفترض أنها يملك لأكون DPs لأنني أريد أن أكون قادرًا على تحريكهم.)

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

أي شخص آخر تأتي عبر هذا؟

يحرر:

إن DPs هما ScaleX وScaleY - وكلاهما مزدوج.يقومون بقياس موضع X وY للأطفال في اللوحة.وإليك كيفية تعريف واحد منهم:

    public double ScaleX
    {
        get { return (double)GetValue(ScaleXProperty); }
        set { SetValue(ScaleXProperty, value); }
    }

    /// <summary> 
    /// Identifies the ScaleX dependency property.
    /// </summary> 
    public static readonly DependencyProperty ScaleXProperty =
                DependencyProperty.Register(
                      "ScaleX",
                      typeof(double),
                      typeof(MyPanel),
                      new PropertyMetadata(OnScaleXPropertyChanged));

    /// <summary>
    /// ScaleXProperty property changed handler. 
    /// </summary>
    /// <param name="d">MyPanel that changed its ScaleX.</param>
    /// <param name="e">DependencyPropertyChangedEventArgs.</param> 
    private static void OnScaleXPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        MyPanel _MyPanel = d as MyPanel;
        if (_MyPanel != null)
        {
            _MyPanel.InvalidateArrange(); 
        }
    }

    public static void SetScaleX(DependencyObject obj, double val)
    {
        obj.SetValue(ScaleXProperty, val);
    }

    public static double GetScaleX(DependencyObject obj)
    {
        return (double)obj.GetValue(ScaleXProperty);
    }

يحرر:لقد جربت ذلك مع وبدون استدعاء InvalidateArrange (وهو أمر ضروري للغاية على أي حال) والنتيجة هي نفسها.لا يتم حتى استدعاء معالج الحدث قبل بدء الخطأ الكارثي.

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

المحلول

إنه خطأ موثق في Silverlight 2 Beta 2.لا يمكنك تحريك خاصيتين تابعتين مخصصتين على نفس الكائن.

نصائح أخرى

سأحاول التعليق على InvalidateArrange في OnPropertyChanged وأرى ما سيحدث.

آمل ألا يكون الأمر سيئًا للإجابة على سؤالي.

تم إصدار Silverlight 2 Release Candidate 0 اليوم، ولقد اختبرت هذه المشكلة عليه، ويبدو أنه تم إصلاحها.يمكن الآن تحريك كلا من DPs المخصصين في لوحة الاختبار الخاصة بي بشكل صحيح، وبالتالي فإن التطبيق يتصرف كما هو متوقع.وهو لطيف.

لاحظ أن RC هذا هو مجرد RC قائم على المطورين، لذا لم يتم تحديث البنية القياسية لـ Silverlight.لكن أتوقع أن يتم إصداره بالكامل في الشهر المقبل.

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