WPF Exceed busyindicator +列表框组合样式问题

时间:2018-08-07 22:16:51

标签: wpf xaml styles xceed

我使用带有非常简单示例的xceed busyindicator控件和列表框。所以我将列表框的背景色设置为黑色,并且当busyindicator的isbusy属性设置为true时。列表框背景颜色变为白色,但对于其余控件(如网格),背景颜色保持不变。请参见下面的示例。我希望我的列表框颜色保持与设置的颜色相同,但是当isBusy = true时,其颜色变为白色。

<Grid Margin="10">
    <xctk:BusyIndicator IsBusy="True">
        <Grid Background="Black">
            <Grid.RowDefinitions>
                <RowDefinition Height="0.50*" />
                <RowDefinition Height="0.50*" />
            </Grid.RowDefinitions>
            <ListBox Background="Black" Foreground="White">
                <ListBoxItem>ListBox Item #1</ListBoxItem>
                <ListBoxItem>ListBox Item #2</ListBoxItem>
                <ListBoxItem>ListBox Item #3</ListBoxItem>
            </ListBox>
        </Grid>

    </xctk:BusyIndicator>
</Grid>

1 个答案:

答案 0 :(得分:0)

默认情况下,BusyIndi​​cator具有半透明的叠加层。此外,它设置基础元素的IsEnabled=False

您可以这样实现自己的目标:

     <Grid Margin="10">
        <Grid.Resources>

            <Style x:Key="_BlackListBoxStyle" TargetType="{x:Type ListBox}">
                <Setter Property="Background" Value="Black" />
                <Setter Property="Foreground" Value="White" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBox}">
                            <Grid Width="Auto" Height="Auto">
                                <Border x:Name="Border" CornerRadius="0,0,0,0" />
                                <ScrollViewer
                                    Focusable="false"
                                    HorizontalScrollBarVisibility="Disabled"
                                    IsTabStop="False"
                                    >
                                    <StackPanel IsItemsHost="true" />
                                </ScrollViewer>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderThickness" Value="0,0,0,0" />
            </Style>
        </Grid.Resources>
        <xctk:BusyIndicator IsBusy="True">
            <Grid Background="Black">
                <Grid.RowDefinitions>
                    <RowDefinition Height="0.50*" />
                    <RowDefinition Height="0.50*" />
                </Grid.RowDefinitions>
                <ListBox IsEnabled="False" Style="{StaticResource _BlackListBoxStyle}">
                    <ListBoxItem>ListBox Item #1</ListBoxItem>
                    <ListBoxItem>ListBox Item #2</ListBoxItem>
                    <ListBoxItem>ListBox Item #3</ListBoxItem>
                </ListBox>
            </Grid>
            <xctk:BusyIndicator.OverlayStyle>
                <Style TargetType="Rectangle">
                    <Setter Property="Fill" Value="Transparent" />
                </Style>
            </xctk:BusyIndicator.OverlayStyle>
        </xctk:BusyIndicator>
    </Grid>