4

白黒のアプリケーションがあり、明るさを下げる機能が必要です。どうすればこれを行うことができますか? すべての白は、ResourceDictionary(Application.xaml) に保存されている SolidColorBrush に由来します。現在の解決策は、80% の不透明度で戻る空のウィンドウを配置することですが、これでは下にあるウィンドウを使用できません。

4

3 に答える 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 つの方法があります。

  1. ロバートが提案したように、リソースをリソース ツリーの下位レベルに配置します。たとえば、WindowResourcesコレクション。これにより、共有が難しくなります。
  2. リソースをフリーズできないラッパーに入れてください。

#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 に答える