Шаблон стиля Powershell WPF для отключенного ListBox - PullRequest
0 голосов
/ 18 июня 2020

У меня есть сценарий PowerShell, который в какой-то момент создает форму WPF для некоторого базового c ввода от пользователя. У меня есть ListBox с CheckBoxes, где пользователь выбирает необходимые параметры, но по умолчанию он отключен, и пользователю необходимо выполнить некоторые действия, прежде чем он включится. Как видно из нижеприведенного XAML, общий дизайн темный, поэтому отключенные по умолчанию стили для ListBox выглядят довольно некрасиво. Как мне изменить ниже XAML, чтобы при отключении я мог управлять хотя бы фоном? Я знаю, что мне нужно создать шаблон стиля и добавить триггер, который переключает стили, когда ListBox отключен, но я попробовал несколько подходов, найденных в Интернете, и ни один из них не работает.

Вот 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>

1 Ответ

1 голос
/ 18 июня 2020

Вы должны определить стиль только для ItemsPanelTemplate из ListBox.

Попробуйте это в качестве примера:

    <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...