سؤال

لدي Custom UserControl التي تحتوي على "إصدارات" من النوع "Datatemplate" من النوع ". أقوم بإنشاء مثيل لهذه العنصر عبر. التحميل ()، تعيين .datacontext ووضعها محتوى. العيب الوحيد لدي هو أن Datatemplate.Triggers لا يتم إطلاقها.

مثال رمز XAML:

<Window.Resources>
    <DataTemplate x:Key="MyTemplate">
        <Label Name="MyLabel" Content="Default"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding}" Value="1">
                <Setter TargetName="MyLabel" Property="Content" Value="True" />
            </DataTrigger>
            <DataTrigger Binding="{Binding}" Value="0">
                <Setter TargetName="MyLabel" Property="Content" Value="False" />
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>        
</Window.Resources>

<ContentControl x:Name="MyContent" />

مثال الرمز وراء:

private void Window_Loaded(object sender, RoutedEventArgs e) {
    var template = FindResource("MyTemplate") as DataTemplate;

    var instance = template.LoadContent() as FrameworkElement;
    instance.DataContext = "1";
    MyContent.Content = instance;
}

الإخراج هو "الافتراضي".

نفس datatemplate المستخدم في مربع القائمة يعمل بشكل جيد:

<ListBox x:Name="MyListBox" ItemTemplate="{StaticResource MyTemplate}" />

رمز وراء:

MyListBox.ItemsSource = new[] { "1", "0" };

الإخراج هو "صحيح" و "خطأ".

أي أفكار كيفية إطلاق Datatemplate.Triggers؟ هل أحتاج إلى الدورة يدويا على جميع المشغلات وتنفيذها؟ إذا كانت الإجابة بنعم، كيف يمكنني تقييم الزناد؟

شكرا مقدما،

مسيحي

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

المحلول

تطبيق الخاص بك DataTemplate إلى أ ContentControl بدلا من تعديلها على ذبابة مثلك:

MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate;
MyContent.Content = "1";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top