Wpf 是否可以突出显示ComboBoxItem,但不将其设置为所选项目?

Wpf 是否可以突出显示ComboBoxItem,但不将其设置为所选项目?,wpf,.net-3.5,styles,Wpf,.net 3.5,Styles,我有一个组合框,我正在填充退货授权接收应用程序的部件列表。在我们的RA系统中,客户可以指定退回一个套件,但实际上只退回一部分套件。因此,我的组合框显示了属于套件的部件列表,并要求接收者选择实际收到的部件 我发现将我收到的零件列表中的所选项目默认设置为“向延迟接收者退货”中指定的零件,并且收到的零件信息不正确。所以我没有选择ComboxBox 我想做的是突出显示组合框中指定的部分,而不是实际选择它。这样可以快速找到实际零件,同时仍需要用户实际选择 虽然这不起作用,但我认为它可以说明我想做什么: &

我有一个组合框,我正在填充退货授权接收应用程序的部件列表。在我们的RA系统中,客户可以指定退回一个套件,但实际上只退回一部分套件。因此,我的组合框显示了属于套件的部件列表,并要求接收者选择实际收到的部件

我发现将我收到的零件列表中的所选项目默认设置为“向延迟接收者退货”中指定的零件,并且收到的零件信息不正确。所以我没有选择ComboxBox

我想做的是突出显示组合框中指定的部分,而不是实际选择它。这样可以快速找到实际零件,同时仍需要用户实际选择

虽然这不起作用,但我认为它可以说明我想做什么:

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Part.MasterPart.FamilyParts}" 
          SelectedItem="{Binding Path=ReceivedPart, ValidatesOnDataErrors=True}" >
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">                      
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Part.MaxId}"
                             Value="{Binding Path=Part.MaxId}">
                    <Setter Property="Background" Value="LightSalmon" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

除了设置背景色之外,还有一些高亮显示的方法,我建议您探索它们,因为对于用户来说,由于选择和高亮显示的不同原因而使用不同的背景色可能会造成混淆。例如,您可以在相关项目旁边放一个小星星,或将其加粗

也就是说,您可以这样做来设置ComboBoxItem的背景色:


除了设置背景色之外,还有一些高亮显示的方法,我建议您探索它们,因为对于用户来说,由于选择和高亮显示的不同原因而使用不同的背景色可能会造成混淆。例如,您可以在相关项目旁边放一个小星星,或将其加粗

也就是说,您可以这样做来设置ComboBoxItem的背景色:


这是正确的,但我要做的是在Part类中放置一个bool只读属性,告诉combobox在这个实例中是否应该高亮显示它。您可以尝试以下方法:

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Part.MasterPart.FamilyParts}" 
          SelectedItem="{Binding Path=ReceivedPart, ValidatesOnDataErrors=True}" >
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <Grid>
        <Border Background="LightSalmon" Visibility="{Binding Part.Highlighted, Converter={StaticResource BoolToVizConverter}}"/>
        <TextBlock Text="{Binding Part.Name}"/>
      </Grid>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

这样,如果高亮显示为false,边框的背景将根本不会显示。

您的思路是正确的,但我要做的是在零件类中放置一个bool只读属性,告诉组合框在此实例中是否应高亮显示。您可以尝试以下方法:

<ComboBox Grid.Column="1" ItemsSource="{Binding Path=Part.MasterPart.FamilyParts}" 
          SelectedItem="{Binding Path=ReceivedPart, ValidatesOnDataErrors=True}" >
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <Grid>
        <Border Background="LightSalmon" Visibility="{Binding Part.Highlighted, Converter={StaticResource BoolToVizConverter}}"/>
        <TextBlock Text="{Binding Part.Name}"/>
      </Grid>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

这样,如果高亮显示为false,边框的背景就不会显示。

您的想法是对的。我认为您的代码唯一的错误是DataTrigger属性

如果值只是一个值,那么它会起作用:

<DataTrigger Binding="{Binding Path=Part.MaxId}" Value="999" >
为了简单起见,我将把这个逻辑包装到viewmodel的一个新属性中:

<DataTrigger Binding="{Binding Path=Part.ShouldHighlight}" Value="true">

你的想法是对的。我认为您的代码唯一的错误是DataTrigger属性

如果值只是一个值,那么它会起作用:

<DataTrigger Binding="{Binding Path=Part.MaxId}" Value="999" >
为了简单起见,我将把这个逻辑包装到viewmodel的一个新属性中:

<DataTrigger Binding="{Binding Path=Part.ShouldHighlight}" Value="true">

您可以使用样式选择器来确定项目使用的样式,而不是向视图模型中添加属性。

您可以使用样式选择器来确定项目使用的样式,而不是向视图模型中添加属性。

Kent,我喜欢您关于其他高亮显示方法的建议。我相信你关于在comboxbox中没有不同的高亮显示颜色的说法是正确的,因为这可能会混淆问题。Kent,我喜欢你关于其他高亮显示方法的建议。我相信你说的对,在comboxbox中没有不同的突出显示颜色,因为这可能会混淆问题。