用于禁用列表框的 Powershell WPF 样式模板

Powershell WPF style template for disabled ListBox

我有一个 powershell 脚本,它有时会为用户的一些基本输入创建一个 WPF 表单。 我有一个 ListBoxCheckBoxes,用户可以在其中选择必要的选项,但默认情况下它是禁用的,用户需要在启用之前执行一些操作。从下方 XAML 可以看出,整体设计是深色的,因此 ListBox 的默认禁用样式看起来非常难看。 XAML以下需要怎么改,这样禁用的时候至少能控制背景?我知道我需要创建一个样式模板并添加触发器以在 ListBox 被禁用时切换样式,但我尝试了几种在网上找到的方法并且其中 none 有效。

这是我正在使用的XAML

<Window x:Name="MyLittleFormMainWindow" x:Class="MyLittleForm.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyLittleForm"
        mc:Ignorable="d"
        Title="My Little Form" Height="450" Width="800" FontFamily="OCRB" FontSize="14" Opacity="0.8" Background="#33000000" Foreground="Lime" BorderBrush="#05000000" WindowStyle="ToolWindow" BorderThickness="0" ResizeMode="NoResize">


    <Grid Margin="0,10,4,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="33*"/>
            <RowDefinition Height="173*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="18*"/>
            <ColumnDefinition Width="61*"/>
        </Grid.ColumnDefinitions>



        <Button x:Name="buttonGetFiles" Content="Press to enable" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="160" Height="48" Background="#F2323232" Foreground="#FFFDA100" FontSize="18" Grid.Column="0" Grid.Row="0"/>
        <ListBox x:Name="checkBoxList" HorizontalAlignment="Left" Margin="10,10,10,10" VerticalAlignment="Top" Width="160" Height="200" ItemsSource="{Binding MyItemsListProperty}" SelectionMode="Multiple" Background="#F2323232" Foreground="#FFFDA100" Grid.Column ="0" Grid.Row="1" IsEnabled="False" >

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="2">

                        <CheckBox IsChecked="{Binding isChecked}" BorderBrush="#FF000A64" Background="Lime" Foreground="Lime" Content="{Binding Content}" />

                    </Grid>
                </DataTemplate>

            </ListBox.ItemTemplate>

        </ListBox>
        <Label x:Name="textLabel" Content="My Little Form" Grid.Column="1" Grid.Row ="0" HorizontalAlignment="Right" Margin="10,10,10,10" VerticalAlignment="Top" FontFamily="OCR A Extended" FontSize="42" Foreground="Lime" Height="48" />



    </Grid>
</Window>

您只能为 ListBoxItemsPanelTemplate 定义样式。

以这个为例:

    <Grid Margin="0,10,4,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="33*"/>
        <RowDefinition Height="173*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="18*"/>
        <ColumnDefinition Width="61*"/>
    </Grid.ColumnDefinitions>



    <Button x:Name="buttonGetFiles" Content="Press to enable" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="160" Height="48" Background="#F2323232" Foreground="#FFFDA100" FontSize="18" Grid.Column="0" Grid.Row="0"/>
    <ListBox x:Name="checkBoxList" 
             HorizontalAlignment="Left" 
             Margin="10,10,10,10" 
             VerticalAlignment="Top" Width="160" Height="200" 
             ItemsSource="{Binding MyItemsListProperty}" 
             SelectionMode="Multiple" 
             Foreground="#FFFDA100" 
             Grid.Column ="0" Grid.Row="1" 
             IsEnabled="False" >
        <ListBox.Style>
            <Style TargetType="ListBox">
                <Setter Property="Background" Value="#F2323232"></Setter>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsEnabled}" Value="False">
                        <Setter Property="Background" Value="#F2323232"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListBox.Style>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel >
                    <StackPanel.Style>
                        <Style TargetType="StackPanel">
                            <Setter Property="Background" Value="#F2323232"></Setter>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=IsEnabled}" Value="False">
                                    <Setter Property="Background" Value="#AA323232"></Setter>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </StackPanel.Style>
                </StackPanel>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="2">
                    <CheckBox IsChecked="{Binding isChecked}" BorderBrush="#FF000A64" Background="Lime" Foreground="Lime" Content="{Binding Content}" />
                </Grid>
            </DataTemplate>

        </ListBox.ItemTemplate>

    </ListBox>
    <Label x:Name="textLabel" Content="My Little Form" Grid.Column="1" Grid.Row ="0" HorizontalAlignment="Right" Margin="10,10,10,10" VerticalAlignment="Top" FontFamily="OCR A Extended" FontSize="42" Foreground="Lime" Height="48" />



</Grid>