datatemplate، loadcontent و datatriggers لا تطلق النار
-
16-09-2019 - |
سؤال
لدي 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";
لا تنتمي إلى StackOverflow