简体   繁体   English

字典中的 ComboBox(WPF) 模板

[英]ComboBox(WPF) template in dictionary

I'm practicing C# with wpf and I'm trying to use template formatting.我正在用 wpf 练习 C#,我正在尝试使用模板格式。
At this time, I have a customized combobox bind link this:此时,我有一个自定义的组合框绑定链接:

<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>   

As I want another combobox like this in another xaml file (another window), I am trying to put this as a template in my app.xaml file.因为我想要另一个 xaml 文件(另一个窗口)中的另一个像这样的组合框,我试图将它作为模板放在我的app.xaml文件中。 This will prevent the copying of code and simplify things.这将防止复制代码并简化事情。

This is what I wrote in the app.xaml file:这是我在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>  

The problem is that it can't find ItemTemplate in my control template.问题是它在我的控件模板中找不到 ItemTemplate。 How can I give it that item template?我怎样才能给它那个项目模板?

I think you need a Style here, not ControlTemplate :我认为你在这里需要一个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 defines how control is rendered while Style defines control property values. ControlTemplate定义如何呈现控件,而Style定义控件属性值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM