我的 WPF 窗口 ComboBoxes 有一个自定义模板,它显示从 ComboBoxItem 继承的项目,这些项目也有一个 Image 属性(以便我的项目可以显示文本和图像)。对于任何给定项目,组合框的弹出菜单中的文本和图像都按预期显示,但我无法在当前选定的项目中显示图像。
ComboBox 模板中显示当前选定项的 ContentPresenter 将其 Content 属性正确绑定到 {TemplateBinding SelectionBoxItem},并且其 ContentTemplate 绑定到以下静态资源:
<DataTemplate x:Key="SelectionBoxItemTemplateTextAndImage" DataType="{x:Type SB:SBComboBoxItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Source="{Binding Image}"/>
<TextBlock Grid.Column="1" Text="{Binding}"/>
</Grid>
</DataTemplate>
SBComboBoxItem 是从 ComboBox 继承的自定义控件,并且包含正确注册为 DependencyProperty 的“图像”属性。
我尝试了该 DataTemplate 的替代实现,包括使用:
{Binding Path=Image, RelativeSource={RelativeSource TemplatedParent}}
作为图像的来源。这不起作用,即使当我将 TextBlock 的 Text 属性设置为:
{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}
我已经玩过,发现了许多显示文本的实现,但等价物对图像不起作用。我不明白为什么这不起作用,因为设置弹出窗口以显示图像和文本是轻而易举的事。
编辑:这是 ComboBoxItem 处理图像的附加功能,以防我在那里做错了什么:
public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("Image", typeof(Image), typeof(SBComboBoxItem));
public Image Image { get { return (Image)GetValue(ImageProperty); } set { SetValue(ImageProperty, value); } }
这里是我有一个 ComboBox 并添加了项目的地方:
<ComboBox SelectedIndex="1">
<SB:SBComboBoxItem Content="Text">
<SB:SBComboBoxItem.Image>
<Image Source="..\Images\Table.png"/>
</SB:SBComboBoxItem.Image>
</SB:SBComboBoxItem>
<SB:SBComboBoxItem Content="MoreText">
<SB:SBComboBoxItem.Image>
<Image Source="..\Images\Euclidian.png"/>
</SB:SBComboBoxItem.Image>
</SB:SBComboBoxItem>
</ComboBox>