Легко, если вы используете 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>
Это будет работать со свойствами любого типа, а не просто BOOL, пока значение, которое вы хотите, чтобы соответствовать могут быть преобразованы строка в атрибуте триггера 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
экземпляры в цикле в вашем коде, вы должны будете написать конвертер или что-то. Если вы дадите мне больше подробностей, я могу вас обмануть, как сделать эту работу с вашим собственным кодом.