2011-11-16 98 views
1

我正在用wpf練習C#,並試圖使用模板格式。
在這個時候,我有一個自定義組合框綁定鏈接這樣的:字典中的組合框(WPF)模板

<ComboBox Height="23" HorizontalAlignment="Left" Margin="177,28,0,0" Name="JoinedFiles_combobox" VerticalAlignment="Top" Width="164" Grid.Column="1" SelectionChanged="JoinedFiles_combobox_SelectionChanged"> 
    <ComboBox.ItemTemplate> 
    <DataTemplate> 
     <Canvas Height="18"> 
     <Image Name="ImageName" Height="16" Width="16" Canvas.Left="1" Canvas.Top="1"/> 
     <TextBlock Text="{Binding Name}" Canvas.Left="26" Canvas.Top="1" Width="120"/> 
     </Canvas> 
     <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding PictureID}" Value="0"> 
      <Setter TargetName="ImageName" Property="Source" Value="Resources\0.png"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding PictureID}" Value="1"> 
      <Setter TargetName="ImageName" Property="Source" Value="Resources\1.png"/> 
     </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

,因爲我想在另一個XAML文件(另一個窗口)的另一個組合框這個樣子,我試圖把這個作爲模板,我app.xaml文件。這將防止代碼的複製和簡化。

這是我在app.xaml文件中寫道:

<Application.Resources> 
    <ResourceDictionary> 
    <ControlTemplate x:Key="CustomisedComboBox" TargetType="{x:Type ComboBox}"> 
     <ItemTemplate> 
     <DataTemplate> 
      <Canvas Height="18"> 
      <Image Name="ImageName" Height="16" Width="16" Canvas.Left="1" Canvas.Top="1"/> 
      <TextBlock Text="{Binding Name}" Canvas.Left="26" Canvas.Top="1" Width="120"/> 
      </Canvas> 
      <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding PictureID}" Value="0"> 
       <Setter TargetName="ImageName" Property="Source" Value="Resources\0.png"/> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding PictureID}" Value="1"> 
       <Setter TargetName="ImageName" Property="Source" Value="Resources\1.png"/> 
      </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
     </ItemTemplate> 
    </ControlTemplate> 
    </ResourceDictionary> 
</Application.Resources> 

的問題是,它不能在我的控制模板找到的ItemTemplate。我怎樣才能給它的項目模板?

回答

2

我想你需要一個Style這裏,不ControlTemplate

<Style x:Key="CustomisedComboBox" TargetType="{x:Type ComboBox}"> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Canvas Height="18"> 
        <Image Name="ImageName" Height="16" Width="16" Canvas.Left="1" Canvas.Top="1"/> 
        <TextBlock Text="{Binding Name}" Canvas.Left="26" Canvas.Top="1" Width="120"/> 
       </Canvas> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding PictureID}" Value="0"> 
         <Setter TargetName="ImageName" Property="Source" Value="Resources\0.png"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding PictureID}" Value="1"> 
         <Setter TargetName="ImageName" Property="Source" Value="Resources\1.png"/> 
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ControlTemplate定義瞭如何同時Style定義控件屬性值控件呈現。

+0

謝謝! – djfoxmccloud