【问题标题】:WPF: Prevent ComboBox from displaying selected itemWPF:防止组合框显示所选项目
【发布时间】:2016-10-20 18:52:44
【问题描述】:

我有一个ComboBox,我已将其模板化为如下所示:

这是ComboBox 的 XAML:

<ComboBox Name="StateInclusionRules_ComboBox" 
          ItemsSource="{Binding StateInclusionRules}"
          Height="25"
          Width="155"
          Margin="0"
          Grid.Column="7">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal"
                        Margin="0">
                <Label Content="{Binding State}"
                       Margin="0,0,0,0"
                       Width="30" />
                <CheckBox IsChecked="{Binding StateTax}" 
                          Margin="20,0,0,0"/>
                <CheckBox IsChecked="{Binding StateChildSupport}" 
                          Margin="30,0,0,0"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

有没有办法防止选中的项目显示在ComboBoxContentPresenter(红色边框区域,即ComboBox关闭时看到的区域)?

【问题讨论】:

标签: c# wpf xaml combobox


【解决方案1】:

首先您需要 2 个 DataTemplates,1 个用于选定项,1 个用于下拉项。

选择的我们将留空,因为这是您的要求。 下拉项 DataTemplate 将具有您想要的确切 DataTemplate。 当项目被选中时,DataTrigger 会将其模板更改为 SelectedTemplate,如下所示:

  <Window.Resources>

    <DataTemplate x:Key="DropDownItemTemplate" DataType="wpfApplication1:ItemSourceModel">
        <StackPanel Orientation="Horizontal"
                    Margin="0">
            <Label Content="{Binding Value}"
                   Margin="0,0,0,0"
                   Width="30" />
            <CheckBox IsChecked="{Binding Value}" 
                      Margin="20,0,0,0"/>
            <CheckBox IsChecked="{Binding Value}" 
                      Margin="30,0,0,0"/>
        </StackPanel>
    </DataTemplate>

    <DataTemplate x:Key="SelectionBoxTemplate">

    </DataTemplate>

    <DataTemplate x:Key="ComboBoxTemplate">
        <ContentPresenter x:Name="Presenter"
               Content="{Binding}"
               ContentTemplate="{StaticResource DropDownItemTemplate}" />
        <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>

并使用 ComboBoxTemplate 设置您的 ComboBox:

   <ComboBox Name="StateInclusionRules_ComboBox" 
      ItemsSource="{Binding YourItemSource}" ItemTemplate="{StaticResource ComboBoxTemplate}" 
      Height="25"
      Width="155"
      Margin="0"
      />

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多