禁用某些ListBox项

时间:2015-04-28 23:20:31

标签: xaml windows-store-apps windows-8.1 win-universal-app

禁用我的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项,如果禁用该项,则列表框项需要显示为灰色。

有人可以指出我正确的方向吗?

1 个答案:

答案 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属性值。

希望有帮助..! 询问是否需要进一步的帮助..