문제

글쎄, 나는 흑백 응용 프로그램이 있고 밝기를 낮추기 위해 함수가 필요합니다. 어떻게해야합니까? 모든 흰색은 Resourcedictionary (Application.xaml)에 저장된 SolidcolorBrush에서 나옵니다. 현재 솔루션은 80% 불투명도로 돌아온 빈 창을 넣는 것입니다. 그러나 이것은 기본 창을 사용할 수 없습니다.

도움이 되었습니까?

해결책

모든 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 냉동 :

내장 브러시 중 하나를 사용하는 경우 ( Brushes 클래스) 그러면 얼어 붙을 것입니다. 그들 중 하나를 사용하는 대신 자신의 Brush 얼지 않고 :

<SolidColorBrush x:Key="Brush">White</SolidColorBrush>

응용 프로그램 수준 리소스에 대한 Robert의 의견 후 편집 :

로버트가 옳다. 자원이 추가되었습니다 Application 동결 가능하면 레벨이 자동으로 동결됩니다. 당신이 그들에게 얼어 붙지 말라고 명시 적으로 요청하더라도 :

<SolidColorBrush x:Key="ForegroundBrush" PresentationOptions:Freeze="False" Color="#000000"/>

이 주위에 내가 볼 수있는 두 가지 방법이 있습니다.

  1. Robert가 제안한 것처럼 자원을 리소스 트리의 낮은 수준으로 올려 놓으십시오. 예를 들어, a Window'에스 Resources 수집. 이것은 공유하기가 더 어려워집니다.
  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;
    }
}

그것은 예쁘지는 않지만 지금 당장 생각할 수있는 최고입니다.

다른 팁

브러시를 수정하는 대신 루트 요소의 불투명도를 변경함으로써 이것을 해결했지만, 어떤 사람들이 내가 어떻게 또는 그 방법을 할 수 있는지 말해 주면 여전히 좋을 것입니다.

켄트의 솔루션은 작동하면 작동합니다 SolidColorBrush 더 낮은 수준의 리소스에 추가됩니다. 냉동실이 추가되면 자동으로 동결됩니다 Application.Resources.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top