2009-08-15 36 views
3

我有一個自定義的UserControl,它有一個類型爲「DataTemplate」的DependencyProperty「ItemTemplate」。我通過.LoadContent()創建這個ItemTemplate的一個實例,分配.DataContext並將其放到ContentControl中。我唯一的缺點是DataTemplate.Triggers沒有被解僱。DataTemplate,LoadContent和DataTriggers沒有觸發

例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; 
} 

輸出爲 「默認值」。

ListBox中使用相同的DataTemplate正常工作:

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

代碼背後:

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

輸出爲 「真」 與 「假」。

任何想法如何觸發DataTemplate.Triggers?我是否需要手動循環所有觸發器並執行它們?如果是,我如何評估觸發器?

由於提前,

基督教

回答

3

應用您DataTemplateContentControl而不是修改它就像你的飛行是:

MyContent.ContentTemplate = FindResource("MyTemplate") as DataTemplate; 
MyContent.Content = "1"; 
+0

是的,這確實起作用(一個小類型,你的意思是MyContent.Content =「1」(或「0」))。謝謝! – 2009-08-16 10:03:21

+0

是的,固定式 - 謝謝。 – 2009-08-16 10:24:36