2015-04-28 5 views
0

Каков наилучший способ отключить некоторые элементы моего списка ListBox?? У меня есть следующий код XAMLОтключить некоторые элементы ListBox

<ListBox x:Name="ScenarioList" Grid.Row="1" SelectionChanged="ScenarioControl_SelectionChanged" 
      SelectionMode="Single" HorizontalAlignment="Left" Style="{StaticResource ScenarioListBoxStyle}" ItemContainerStyle="{StaticResource ListBoxItemStyle}" 
      VerticalAlignment="Top" Margin="0"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Converter={StaticResource ScenarioBinder}}" Style="{StaticResource ListItemTextStyle}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Я привязки данных в коде позади и с помощью следующей IValueConverter привязки данных к моей TextBox

public class ScenarioBindingConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var keyValPair = value as KeyValuePair<Feature, bool>?; 
     return !keyValPair.HasValue ? DependencyProperty.UnsetValue : keyValPair.Value.Key.DisplayName(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     return true; 
    } 
} 

объект Feature имеет свойство IsEnabled, которое я бы например, для привязки непосредственно к элементам ListBox, и если элемент отключен, элемент списка должен быть недоступен.

Может ли кто-нибудь указать мне в правильном направлении?

ответ

2

В соответствии с вашим кодом, если вы используете <StackPanel> или <TextBlock> в своем шаблоне данных, то вы не получите свойство IsEnabled этих двух элементов для связывания. Вместо этого вы можете использовать свойство IsHitTestVisible для включения или отключения события нажатия на этих элементах.

Но, установив IsHitTestVisible, элемент не станет серым, поэтому вам необходимо привязать цвет Foreground, присвоив значение SolidColorBrush значение textblock.

 <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel ... IsHitTestVisible="{Binding Converter={StaticResource HitTestVisibleConverter}"> 
        <TextBlock ... /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

с этим, использовать преобразователь для привязки значения IsEnabled свойства, у вас есть, с IsHitTestVisible собственности.

желающий эта помощь ..! Спросите, требуется ли дополнительная помощь.

+0

Спасибо, что вернулись, и ваше решение имеет смысл! Кроме того, существует ли другой (и простой подход), чтобы перечислить набор элементов и выборочно отключить их с помощью привязок данных? – infinity

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