2017-02-22 76 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情況下,在你的代碼隱藏循環填充它,你必須寫一個轉換器什麼的。如果你給了我更多的細節,我可以讓你瞭解如何使用你自己的代碼進行這項工作。