容易,如果你使用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
当项目应该聚焦,这是真的,你甚至可以更轻松地做到这一点:
<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
情况下,在你的代码隐藏循环填充它,你必须写一个转换器什么的。如果你给了我更多的细节,我可以让你了解如何使用你自己的代码进行这项工作。