使它成为一条线是不可专注的

时间:2017-02-22 15:27:39

标签: xaml focus

我找到了一种让整个listBox不可聚焦的方法,但我想知道是否有办法让lsitbox中的单行成为不可聚焦的?

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

1 个答案:

答案 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实例,则必须编写转换器或其他内容。如果你给我更多细节,我可以让你了解如何使用你自己的代码。