我有一个黑白应用程序,我需要一个降低亮度的函数,我该怎么做?所有的白色都来自于在ResourceDictionary(Application.xaml)中保存的SolidColorBrush,我的当前解决方案是将一个80%不透明度的空窗口放在上面,但这不允许我使用底层窗口..
WPF 更改亮度
原标题:
最佳回答
如果您的所有UI元素都使用相同的Brush
,那为什么不直接修改Brush
以降低亮度?例如:
public void ReduceBrightness()
{
var brush = Application.Resources("Brush") as SolidColorBrush;
var color = brush.Color;
color.R -= 10;
color.G -= 10;
color.B -= 10;
brush.Color = color;
}
在你对“画刷”被冻结的评论后进行编辑:
如果您正在使用内置刷子之一(通过Brushes
类),则它将被冻结。而不是使用其中之一,请声明您自己的刷子
,但不要将其冻结:
<SolidColorBrush x:Key="Brush">White</SolidColorBrush>
在罗伯特对应用程序级资源的评论之后进行编辑:
罗伯特是对的。在 应用程序
级别添加的资源如果可以冻结,则会自动冻结。即使您明确要求它们不要被冻结:
<SolidColorBrush x:Key="ForegroundBrush" PresentationOptions:Freeze="False" Color="#000000"/>
我可以看到有两种解决这个问题的方法:
- As Robert suggested, put the resource at a lower level in the resource tree. For example, in a
Window
sResources
collection. This makes it harder to share though. - Put the resource in a wrapper that is not freezable.
作为第二个例子,考虑以下情况。
App.xaml:
<Application.Resources>
<FrameworkElement x:Key="ForegroundBrushContainer">
<FrameworkElement.Tag>
<SolidColorBrush PresentationOptions:Freeze="False" Color="#000000"/>
</FrameworkElement.Tag>
</FrameworkElement>
</Application.Resources>
Window1.xaml:窗口1.xaml
<StackPanel>
<Label Foreground="{Binding Tag, Source={StaticResource ForegroundBrushContainer}}">Here is some text in the foreground color.</Label>
<Button x:Name="_button">Dim</Button>
</StackPanel>
Window1.xaml.cs: 窗口1.xaml.cs
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_button.Click += _button_Click;
}
private void _button_Click(object sender, RoutedEventArgs e)
{
var brush = (FindResource("ForegroundBrushContainer") as FrameworkElement).Tag as SolidColorBrush;
var color = brush.Color;
color.R -= 10;
color.G -= 10;
color.B -= 10;
brush.Color = color;
}
}
它不是很漂亮,但是这是我现在能想到的最好的。
问题回答
解决方法是通过更改根元素的不透明度而不是尝试修改画笔来解决,但如果有人能告诉我是否可以以某种方式实现或不可能实现,那将仍然很好。
如果将SolidColorBrush
添加到更低级别的资源中,Kent的解决方案将有效。当Freezables
被添加到Application.Resources
时,它们会自动冻结。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding