2011-11-16 3 views
1

wpf로 C#을 연습하고 있으며 템플릿 서식을 사용하려고합니다. 이 때
, 나는 정의 콤보 바인드 링크이있다 : 나는 다른 XAML 파일 (다른 창)에서이 같은 다른 콤보를 할 때, 나는 내 app.xaml의 템플릿으로 넣어 노력하고사전의 ComboBox (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> 

파일. 이렇게하면 코드 복사를 방지하고 사물을 단순화합니다.

이 내가 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> 

ControlTemplateStyle 제어 속성 값을 정의하면서 컨트롤이 렌더링되는 방법을 정의합니다.

+0

고맙습니다! – djfoxmccloud