在 WPF 中的数据绑定组合框中禁用分隔符选择

jml*_*kin 3 wpf combobox databound

我有一个数据绑定的组合框。在这个列表中,我需要一个分隔符。由于这是数据绑定,我做了一些与这篇文章非常相似的事情。我的数据库返回列表,包括一个 '-' 来标记分隔符需要去的地方,数据触发器使它成为一个分隔符。

<ComboBox Name="cbAction" Grid.Column="1" Grid.Row="0" Margin="5,2,5,2" DisplayMemberPath="Description" SelectedValuePath="Code" SelectionChanged="cbAction_SelectionChanged">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
             <Style.Triggers>
                <DataTrigger Binding="{Binding Code}" Value="-">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                                <Separator HorizontalAlignment="Stretch" IsEnabled="False"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

除了我在这里遇到的问题和一个小设计问题(我将在另一个问题中提出)之外,这大部分工作正常。

使用鼠标时,用户无法选择分隔符,这是正确的。但是如果用户使用向上/向下箭头选择项目,他们可以选择分隔符。这不是默认行为,它会跳过分隔符。

如果您的 XAML 具有各种 ComboBoxItems 和一个 Separator 项(使用向上和向下键时跳过分隔符),我如何使此分隔符的行为类似于它的行为方式

ASa*_*nch 5

不是按照 Meleak 的建议设置“Focusable”,而是在 Setter 中将“IsEnabled”设置为 false。

<DataTrigger Binding="{Binding Code}" Value="-"> 
    <Setter Property="IsEnabled" Value="False"/>
    <Setter Property="Template"> 
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBoxItem}"> 
                <Separator HorizontalAlignment="Stretch"/> 
            </ControlTemplate> 
        </Setter.Value> 
    </Setter> 
</DataTrigger> 
Run Code Online (Sandbox Code Playgroud)

  • 设置 IsEnabled 修复了这个问题。 (2认同)