4

我有ComboBox自定义ItemTemplate

<ComboBox Height="20" Width="200" 
          SelectedItem="{Binding Path=SelectedDesign}"
          ItemsSource="{Binding Path=Designs}" HorizontalAlignment="Left" 
          ScrollViewer.CanContentScroll="False">

    <ComboBox.ItemTemplate>
        <DataTemplate DataType="{x:Type formdesign:FormDesignContainer}">
            <Rectangle Width="200" Height="100">
                <Rectangle.Fill>
                    <ImageBrush ImageSource="{Binding Path=ImageThumb}" Stretch="Uniform" />
                </Rectangle.Fill>
            </Rectangle>
        </DataTemplate>
    </ComboBox.ItemTemplate>

</ComboBox>

这很好用。但是 WPF 尝试将矩形绘制为组合框文本。如何为此模板设置“文本”。“文本”是指代表所选项目并在选择项目时写入组合框的字符串或控件

换句话说,我想这样做:

在此处输入图像描述

但现在我得到了这个

在此处输入图像描述

4

3 回答 3

1

尝试使用 TextBlock 设置 SelectionBoxItemTemplate。 似乎 SelectionBoxItemTemplate 是只读的。所以另一种方法是重写ItemContainerStyle.Template。例子

于 2012-12-04T10:09:49.037 回答
0

我发现Ray Burns的这个解决方案是一个很好的方法。您可以为下拉列表中的项目定义两个,另一个为应显示在 中的选定项目定义。使用触发器并检查它决定使用哪个可视化树。DataTemplateCombobox

<Window.Resources>    
  <DataTemplate x:Key="NormalItemTemplate" ...>
    ...
  </DataTemplate>

  <DataTemplate x:Key="SelectionBoxTemplate" ...>
    ...
  </DataTemplate>

  <DataTemplate x:Key="CombinedTemplate">
    <ContentPresenter x:Name="Presenter"
       Content="{Binding}"
       ContentTemplate="{StaticResource NormalItemTemplate}" />
    <DataTemplate.Triggers>
      <DataTrigger
        Binding="{Binding RelativeSource={RelativeSource FindAncestor,ComboBoxItem,1}}"
        Value="{x:Null}">
        <Setter TargetName="Presenter" Property="ContentTemplate"
                Value="{StaticResource SelectionBoxTemplate}" />
      </DataTrigger>
    </DataTemplate.Triggers>
  </DataTemplate>

</Window.Resources>

...

<ComboBox
  ItemTemplate="{StaticResource CombinedTemplate}"
  ItemsSource="..."/>
于 2017-03-12T10:41:30.797 回答
-1

将 Textblock 添加到数据模板并将其绑定或在矩形上添加 Contentpersenter 编辑:似乎我没有得到您想要完成的内容,

于 2012-12-04T09:24:36.650 回答