2017-02-22 119 views
1

我找到了一种方法来使整个列表框不可聚焦,但我想知道是否有办法使lsitbox内的单行不可聚焦?使它如此单行不可聚焦

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

回答

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当项目应该聚焦,这是真的,你甚至可以更轻松地做到这一点:

<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情况下,在你的代码隐藏循环填充它,你必须写一个转换器什么的。如果你给了我更多的细节,我可以让你了解如何使用你自己的代码进行这项工作。