字典中的组合框(WPF)模板
本文关键字:WPF 模板 组合 字典 | 更新日期: 2023-09-27 18:14:44
我正在用wpf练习c#,我正在尝试使用模板格式化。
此时,我有一个自定义的组合框绑定链接如下:
<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。我如何给它项目模板?
我认为你需要一个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
定义控件属性值。