سؤال

حسنا لدي تطبيق الأسود و الأبيض و أحتاج إلى وظيفة أقل سطوع كيف يمكنني فعل هذا ؟ كل أبيض يأتي من SolidColorBrush التي يتم حفظها في ResourceDictionary(التطبيق.xaml) ان الحل هو وضع نافذة فارغة هذا هو العودة مع 80 ٪ التعتيم على أكثر من ذلك لكن هذا لا يسمح لي أن استخدام الكامنة وراء النافذة..

هل كانت مفيدة؟

المحلول

إذا كان كل ما تبذلونه من عناصر واجهة المستخدم باستخدام نفس 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>

تحرير بعد روبرت التعليق على مستوى التطبيق الموارد:

روبرت هو الحق.الموارد المضافة في Application المستوى تلقائيا المجمدة إذا كانت تجميدها.حتى إذا كنت صراحة أطلب منهم أن لا تكون المجمدة:

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

هناك طريقتان حول هذا أستطيع أن أرى:

  1. كما روبرت اقترح وضع الموارد على مستوى أدنى في شجرة الموارد.على سبيل المثال ، Window's Resources جمع.وهذا يجعل من الصعب حصة على الرغم من.
  2. وضع الموارد في المجمع التي لا يمكن تجميدها.

كمثال #2 النظر في المسائل التالية.

التطبيق.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 إلى الموارد على مستوى أدنى. يتم تجميد Freezables تلقائيا عندما كنت تضاف إلى Application.Resources.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top