根据背景颜色选择合适的前景的样式
||
我有一个WPF应用程序,该应用程序附带了由项目类型定义的Label,TextBox等默认样式集(未定义显式键)。
在该应用程序中,使用了两个主要容器,一个使用深色背景,另一个使用浅色背景,因此有时使用黑色作为Label的前景色是正确的,有时则是非常错误的。另一方面,编辑器总是在传统上使用浅色背景和深色前景进行样式设置,因此我不能仅将所有子元素的前景设置为相反的。
有没有一种优雅的方法可以使我的标签(可能还有TextBlocks)决定依赖于“其”背景的前景色?我只想在两种颜色之间切换,因此不需要自动对比度最大化,只需要一个阈值就可以避免白色底色上的白色字体。
我也不想定义两组默认样式,因此我强烈寻求某种方式使我的单个Label-Default-Style适用于两种背景变体。
是否可以(并且在不影响性能的前提下)向样式添加触发器/绑定,以评估当前的背景色?
另外,我将对最佳做法感兴趣,如何在不遇到上述问题的情况下,为某些FrameworkElement(尤其是容器/面板)设置干净的背景色。
这是我尝试过的(当然是简化的):
<UniformGrid>
<UniformGrid.Resources>
<!-- SimpleStyles: Label -->
<Style x:Key=\"{x:Type Label}\" TargetType=\"{x:Type Label}\">
<Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>
<Setter Property=\"VerticalContentAlignment\" Value=\"Top\"/>
<Setter Property=\"Template\">
<Setter.Value>
<ControlTemplate TargetType=\"{x:Type Label}\">
<Border>
<ContentPresenter HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" RecognizesAccessKey=\"True\"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property=\"Background\" Value=\"Black\">
<Setter Property=\"Foreground\" Value=\"Red\"/>
</Trigger>
<Trigger Property=\"IsEnabled\" Value=\"false\">
<Setter Property=\"Foreground\" Value=\"#888888\"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UniformGrid.Resources>
<Label x:Name=\"bgSetExplicitly\" Background=\"Black\">abc
</Label>
<Border Background=\"Black\">
<Label x:Name=\"bgInheritedFromParent\" >abc
</Label>
</Border>
<Label>abc
</Label>
<Label>abc
</Label>
如果Label具有明确的背景设置(x:Name = bgSetExplicitly),但是如果背景是VisualTree中父级的“继承”,则可以看到标签的背景被很好地选择了。 = \“ bgInheritedFromParent \”),不是。
我很乐意让样式能够评估“有效背景”(无论它来自何处)并为此背景选择适当的前景画笔。
没有找到相关结果
已邀请:
3 个回复
款去芳尾脊
属性直接设置为画笔,而是使用
获取画笔。并以相同方式设置背景。 完成此操作后,如果要在应用程序中全局更改前景色/背景色,则只需更改资源。 基本上,这就是开始使WPF应用程序可换肤的方式,这似乎是您要走的路。
辅奈
还有一些示例XAML ...
当然,您可能会希望根据自己的特定需求进行一些调整和清理,但这可以做到。
犀耽澄协吻
现在,无论何时更改\'BackBrush \'的颜色值,所有相关的前景色都会自动更新。根据您的讨论,我认为这也将满足您的样式要求。无论如何,您可能必须制作小型mod,以确保此方法适合您的实际情况。