禁用我的ListBox的某些项目的最佳方法是什么?我在XAML中有以下代码
<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项,如果禁用该项,则列表框项需要显示为灰色。
有人可以指出我正确的方向吗?
答案 0 :(得分:2)
根据您的代码,如果您在数据模板中使用<StackPanel>
或<TextBlock>
,那么您将无法获得要绑定的这两个元素的IsEnabled
属性。相反,您可以使用IsHitTestVisible
属性来启用或禁用这些元素上的点击事件。
但是,通过设置IsHitTestVisible
,元素不会变为灰色,因此您还必须通过为文本块分配Foreground
值来绑定SolidColorBrush
颜色。
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel ... IsHitTestVisible="{Binding Converter={StaticResource HitTestVisibleConverter}">
<TextBlock ... />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
使用转换器绑定您拥有IsEnabled
属性的IsHitTestVisible
属性值。