Шаблон ComboBox (WPF) в словаре - PullRequest
1 голос
/ 16 ноября 2011

Я практикую 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 в моем шаблоне управления.Как я могу дать ему этот шаблон элемента?

1 Ответ

2 голосов
/ 16 ноября 2011

Я думаю, вам нужно 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 определяет значения свойства элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...