إنشاء مورد XAML من التعليمات البرمجية بدون مفتاح

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

  •  02-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة لإضافة مورد إلى ResourceDictionary من التعليمات البرمجية دون إعطائه مفتاح المورد؟

على سبيل المثال، لدي هذا المورد في XAML:

<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}"
        ItemsSource="{Binding Path=Value.Values}">
            <TextBlock Text="{Binding Path=Name}" />
    <HierarchicalDataTemplate>
</TreeView.Resources>

أحتاج إلى إنشاء هذا المورد ديناميكيًا من التعليمات البرمجية وإضافته إلى TreeView ResourceDictionary.ومع ذلك، في XAML، عدم وجود مفتاح يعني أنه يُستخدم افتراضيًا لجميع أنواع FieldPropertyInfo.هل هناك طريقة لإضافته إلى المورد في التعليمات البرمجية دون الحاجة إلى مفتاح أم أن هناك طريقة يمكنني من خلالها استخدام مفتاح مع الاستمرار في استخدامه على جميع أنواع FieldPropertyInfo؟

إليك ما قمت به في C# حتى الآن:

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");

this.Resources.Add(null, fieldPropertyTemplate);

من الواضح أن إضافة مورد إلى ResourceDictionary (المفتاح الفارغ) لا يعمل.

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

المحلول

استخدم النوع الذي تريد تطبيق القالب عليه كمفتاح:

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.SetBinding(
   HierarchialDataTemplate.ItemSourceProperty, 
   new Binding("Value.Values");
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

السبب وراء عدم عمل الكود الخاص بك هو لم تكن في الواقع إعداد الربط.تحتاج إلى استدعاء SetBinding، باستخدام الخاصية التي تريد ربط الارتباط بها.

نصائح أخرى

استخدم النوع الذي تريد تطبيق القالب عليه كمفتاح:

this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

كما هو الحال مع القالب الخاص بك أعلاه، يمكنك تقديم نوع.يجب عليك إما تقديم اسم أو نوع.

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