我找到了一种让整个listBox不可聚焦的方法,但我想知道是否有办法让lsitbox中的单行成为不可聚焦的?
<ListBox.ItemContainerStyle>
<Style TargetType="Control">
<Setter Property="Focusable" Value="False" />
</Style>
</ListBox.ItemContainerStyle>
答案 0 :(得分:1)
很简单,如果你正在使用MVVM:
<ListBox.ItemContainerStyle>
<Style TargetType="Control">
<Style.Triggers>
<DataTrigger Binding="{Binding DontFocusMeBro}" Value="True">
<Setter Property="Focusable" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
只要您想要匹配的值可以从触发器的Value
属性中的字符串转换,那么它将适用于任何类型的属性,而不仅仅是bool。如果您的商品属性为bool
,当商品应该可调焦时,这是真的,您可以更轻松地执行此操作:
<ListBox.ItemContainerStyle>
<Style TargetType="Control">
<Setter Property="Focusable" Value="{Binding MakeMeFocusable}" />
</Style>
</ListBox.ItemContainerStyle>
这假设您的ListBox
填充了您编写的C#类的实例:
public class MyListItem : MyViewModelBase
{
private bool _dontFocusMeBro;
public bool DontFocusMeBro {
get { return _dontFocusMeBro; }
set {
if (value != _dontFocusMeBro) {
_dontFocusMeBro = value;
OnPropertyChanged();
}
}
}
private bool _makeMeFocusable;
public bool MakeMeFocusable
{
get { return _makeMeFocusable; }
set
{
if (value != _makeMeFocusable)
{
_makeMeFocusable = value;
OnPropertyChanged();
}
}
}
// ... other properties ...
}
如果您使用字符串或其他内容填充它,或者更糟糕的是在代码隐藏中的循环中添加ListBoxItem
实例,则必须编写转换器或其他内容。如果你给我更多细节,我可以让你了解如何使用你自己的代码。