白黒のアプリケーションがあり、明るさを下げる機能が必要です。どうすればこれを行うことができますか? すべての白は、ResourceDictionary(Application.xaml) に保存されている SolidColorBrush に由来します。現在の解決策は、80% の不透明度で戻る空のウィンドウを配置することですが、これでは下にあるウィンドウを使用できません。
5446 次
3 に答える
5
すべての 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;
}
Brush
凍結についてのコメントの後に編集します。
ビルトイン ブラシの 1 つを (Brushes
クラス経由で) 使用している場合は、フリーズされます。それらのいずれかを使用する代わりに、Brush
凍結せずに独自のものを宣言します。
<SolidColorBrush x:Key="Brush">White</SolidColorBrush>
アプリケーションレベルのリソースに関するロバートのコメントの後に編集します。
ロバートは正しい。レベルで追加されたリソースは、Application
凍結可能な場合は自動的に凍結されます。凍結しないように明示的に要求したとしても、次のようになります。
<SolidColorBrush x:Key="ForegroundBrush" PresentationOptions:Freeze="False" Color="#000000"/>
これを回避するには、次の 2 つの方法があります。
- ロバートが提案したように、リソースをリソース ツリーの下位レベルに配置します。たとえば、
Window
のResources
コレクション。これにより、共有が難しくなります。 - リソースをフリーズできないラッパーに入れてください。
#2の例として、以下を検討してください。
App.xaml :
<Application.Resources>
<FrameworkElement x:Key="ForegroundBrushContainer">
<FrameworkElement.Tag>
<SolidColorBrush PresentationOptions:Freeze="False" Color="#000000"/>
</FrameworkElement.Tag>
</FrameworkElement>
</Application.Resources>
Window1.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 :
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;
}
}
綺麗とは言えませんが、今思いつく限りでは最高です。
于 2009-03-17T11:49:55.787 に答える
0
ブラシを変更しようとするのではなく、ルート要素の不透明度を変更することでこれを解決しましたが、それを何らかの方法で行うことができるかどうか、または不可能であるかどうかを教えていただければ幸いです。
于 2009-03-17T12:46:39.877 に答える