我有一个数据绑定的组合框。在此列表中,我需要一个分隔符。由于这是数据绑定,我做了与this post非常相似的事情。我的数据库返回列表,包括一个' - '来标记分隔符需要去的地方,datatrigger使它成为一个分隔符。
<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>
除了我在这里遇到的问题之外,这个工作大部分都很好,还有一个小的设计问题(我将在另一个问题中提出)。
使用鼠标时,用户无法选择正确的分隔符。但是,如果用户使用向上/向下箭头选择项目,则可以选择分隔符。这不是默认行为,它会跳过分隔符。
如何使此分隔符的行为类似于XAML具有各种ComboBoxItems和Separator项目(使用向上和向下键时跳过分隔符)的方式
答案 0 :(得分:3)
不要像Meleak所建议的那样设置“可聚焦”,而是在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>
答案 1 :(得分:2)
我尝试了上面提到的建议,但仍然无法获得分隔符。相反,它在组合框中添加了一个空白的可选条目。最后这对我有用。
我将绑定数据项设置为NULL。我的XAML看起来如此:
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Separator HorizontalAlignment="Stretch"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
答案 2 :(得分:1)
可选项不是分隔符本身,而是包含分隔符的ComboBoxItem 尝试在DataTrigger中设置Focusable =“False”。这应该使ComboBoxItem“无法选择”
<强>更新强>
固定的二传手位置
<DataTrigger Binding="{Binding Code}" Value="-">
<Setter Property="Focusable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Separator HorizontalAlignment="Stretch" IsEnabled="False"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>