Xaml 使其成为单线不可聚焦

Xaml 使其成为单线不可聚焦,xaml,focus,Xaml,Focus,我找到了一种使整个列表框不可聚焦的方法,但我想知道是否有一种方法可以使lsitbox中的一行不可聚焦 <ListBox.ItemContainerStyle> <Style TargetType="Control"> <Setter Property="Focusable" Value="False" /> </Style> </ListBox.ItemContainerStyle> 如果您使用的是MVVM,

我找到了一种使整个列表框不可聚焦的方法,但我想知道是否有一种方法可以使lsitbox中的一行不可聚焦

<ListBox.ItemContainerStyle>
    <Style TargetType="Control">
    <Setter Property="Focusable" Value="False" />
    </Style>
 </ListBox.ItemContainerStyle>

如果您使用的是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>
这假设您的
列表框
中填充了您编写的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 ...
}
如果要用字符串或其他东西填充它,或者更糟糕的是在codebehind的循环中添加
ListBoxItem
实例,则必须编写转换器或其他东西。如果你给我更多的细节,我可以让你专注于如何使用你自己的代码来实现这一点

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 ...
}