WPF ウィンドウ ComboBoxes のカスタム テンプレートがあります。これは、ComboBoxItem から継承され、Image プロパティも持つ項目を表示します (項目がテキストと画像の両方を表示できるようにするため)。テキストと画像の両方が、特定のアイテムの ComboBox のポップアップ メニューに期待どおりに表示されますが、現在選択されているアイテムに画像を表示できませんでした。
現在選択されている項目を表示する 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 として適切に登録された「Image」プロパティを含むカスタム コントロールです。
以下を使用するなど、その 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>