سؤال

لقد كنت أستخدم نفس جزء الكود لعدة إصدارات من تطبيقي دون أي مشاكل ، لكنني أتلقى الآن بطريقة غامضة NullRerefenceExceptionS مع ما يلي:

this.Loaded += delegate {
    deleteBrush = new DeleteBrushAdorner( background );
    AdornerLayer al = AdornerLayer.GetAdornerLayer( background );
    al.Add( deleteBrush ); // null ref here??
};

background ما هو الا Border عنصر.

فكرتي حول ما يمكن أن يتسبب في ذلك أ) التحول إلى .NET 4.0 و ب) وضع مثيلات العنصر أعلاه (وهو أ UserControl) في ItemsControl.

من الغريب أن هذا لا يحدث طوال الوقت ، ومن الصعب التنبؤ بموعد حدوث ذلك ، لذلك لا يمكن الاعتماد عليه.

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

المحلول

المستندات ل AdornerLayer.getAdornerLayer حدد:

إذا لم يتم العثور على طبقات مزينة ، فإن الطريقة تعود فارغة.

لذا أعتقد أنه لا توجد طبقات مزينة ... هل لديك أي سبب للاعتقاد بأن هذا لا ينبغي أن يكون كذلك؟ ما الضمان الذي تعتمد عليه حاليًا على أنه ستكون هناك طبقة مزينة في الشجرة المرئية؟

نصائح أخرى

أعلم أن هذا سؤال قديم ولكن كان لدي هذه القضية اليوم.

في حالتي ، كان لدي فصل يعتمد على Window و GetAdornerLayer() عاد لاغية. اتضح أن ControlTemplate لصفتي المشتقة لا تحتوي على AdornerDecorator. مضيفا ذلك على أنه المستوى الأعلى في ControlTemplate حل القضية.

<Style TargetType="my:MyWindow" BasedOn="{StaticResource {x:Type Window}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="my:MyWindow">
                <AdornerDecorator>
                <DockPanel ...>
                </DockPanel>
                </AdornerDecorator>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

أنا فضولي بشأن ما إذا كان هذا قد تم حل هذا بالفعل أم لا. يوفر AdornerDecorator مجموعة من الأملس للعنصر الموجود أدناه - وسيكون كل شيء تحتها. إنه ديكور ، مما يعني أنه يحتوي على طفل هو المحتوى. يتم تزويد هذا المحتوى بمزين. لذلك ، إذا وضعت AdornerDecorator في XAML الخاص بك والطفل هو الحدود ، فإن الحدود لديها مزيج.

علاوة على ذلك ، يعرّف النافذة مجموعة adornerDecorator على أنها الجزء العلوي من الشجرة المرئية بحيث يكون لأي عنصر في النافذة مجموعة من الزملاء فوقها. لذا ، إذا كان المكون من الملاذ أعلاه في نافذة ...

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