gpt4 book ai didi

c# - 当 ListBox 被禁用/停用时覆盖背景颜色

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:18 26 4
gpt4 key购买 nike

我想让 ListBox 背景的所有内容都透明。不专心/专心/随便...

我覆盖了 ListBox 及其 ItemContainerStyle 的样式,但是当它被另一个禁用时,我在 ListBox 上仍然有背景色元素...

<Style TargetType="{x:Type ListBox}" x:Key="MyListBoxStyle">
<Setter Property="Background" Value="{DynamicResource TransparentBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource TransparentBackgroundBrush}"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ItemContainerStyle" Value="{DynamicResource MyListBoxItemStyle}"/>
</Style>



<Style TargetType="{x:Type ListBoxItem}" x:Key="MyListBoxItemStyle">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{DynamicResource TransparentColor}" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{DynamicResource TransparentColor}"/>
</Style.Resources>
</Style>

我还尝试将 FocusVisualStyle 设置为 null(参见 answer);将一些“非事件”颜色 brushSystem.Colors 设置为透明并将 ScrollBar 颜色设置为透明(参见 link )但没有任何效果...

  • 我错过了什么?
  • 您知道哪种颜色可能是问题所在吗(参见 post)?
  • 状态是什么?禁用?不活跃?

最佳答案

很难通过全局更改颜色来做到这一点,因为您会从其他控件中获得混淆效果。

更改列表框的背景颜色以匹配给定状态,如非事件或禁用,可以通过获取像这样的普通列表框模板来实现...

 <Style x:Key="{x:Type ListBox}" TargetType="ListBox">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.CanContentScroll" Value="true" />
<Setter Property="MinWidth" Value="120" />
<Setter Property="MinHeight" Value="95" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<Border Name="Border" BorderThickness="1" CornerRadius="2">
<Border.Background>
<SolidColorBrush Color="{StaticResource ControlLightColor}" />
</Border.Background>
<Border.BorderBrush>
<SolidColorBrush Color="{StaticResource BorderMediumColor}" />
</Border.BorderBrush>
<ScrollViewer Margin="0" Focusable="false">
<StackPanel Margin="2" IsItemsHost="True" />
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Border" Property="Background">
<Setter.Value>
<SolidColorBrush Color="{StaticResource DisabledControlLightColor}" />
</Setter.Value>
</Setter>
<Setter TargetName="Border" Property="BorderBrush">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledBorderLightColor}" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Type ListBoxItem}" TargetType="ListBoxItem">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="Border" Padding="2" SnapsToDevicePixels="true">
<Border.Background>
<SolidColorBrush Color="Transparent" />
</Border.Background>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource SelectedBackgroundColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource SelectedUnfocusedColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

...并将其添加到您的窗口资源中。请注意,模板引用了一组颜色,这些颜色在对象图的上方进一步定义为...

    <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
<Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
<Color x:Key="DisabledForegroundColor">#FF888888</Color>
<Color x:Key="ControlLightColor">White</Color>
<Color x:Key="ControlMediumColor">#FF7381F9</Color>
<Color x:Key="ControlDarkColor">#FF211AA9</Color>
<Color x:Key="BorderLightColor">#FFCCCCCC</Color>
<Color x:Key="BorderMediumColor">#FF888888</Color>
<Color x:Key="BorderDarkColor">#FF444444</Color>
<Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
<Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>

...这些可以替换为透明的 WPF 值,即 #00FFFFFF。这会将模板中存在引用的ALL 颜色更改为透明。 StoryBoard 颜色引用系统颜色,需要单独更改。或者完全删除 Storyboard。

一旦您获得所需样式的工作模型,您就可以有选择地向资源和样式列表框添加一个键。

正如发布的那样,这一切都在 4.5 下编译并运行干净......

有趣的链接是...

ListBox Styles and Templates

Color values

还有一个非常有用的实用程序,用于检查 WPF dll 中的模板:http://www.sellsbrothers.com/tools/ShowMeTheTemplate.zip

关于c# - 当 ListBox 被禁用/停用时覆盖背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com