2017-02-22 13 views
1

Я нашел способ сделать весь списокBox неактивным, но мне было интересно, есть ли способ сделать одну строку в 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> 

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

Смежные вопросы