Как я узнаю в коде, что RadialGradientBrush не отображается правильно? - PullRequest
1 голос
/ 10 июня 2019

Я использую RadialGradientBrush в качестве фона для кнопки. На одном компьютере это работает хорошо. С другой стороны, фон прозрачный.

NewComputer: Intel i7-8700, 16 Гб оперативной памяти, 64-разрядная ОС, графика - Nvidia GeForce GTx1050Ti

OldComputer: Intel 6300, оперативная память 2 Гб, 32-разрядная ОС, графика - набор микросхем Intel G965 Express

Оба компьютера работают под управлением Windows 10 Home, монитора 1809 (17763.503), 1920x1080.

Запуская одну и ту же программу на каждом компьютере (показано ниже), я не получаю RadialGradientBrush для отображения на OldComputer. RadialGradientBrush активен - я могу получить цвет из GradientStop 1 и использовать его в качестве SolidColorBrush для фона.

LinearGradientBrush будет правильно отображаться на OldComputer.

Драйвер для G965 выпущен в 2012 году и является настолько актуальным, насколько это доступно. Я предполагаю, что проблема в этой старой графике G965, хотя я не уверен в этом.

Это единственный код в программе. За этим нет дополнительного кода, кроме того, который используется по умолчанию.

<Page
    x:Class="RadialGradientBrush_Test.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:RadialGradientBrush_Test"
    xmlns:media="using:Microsoft.Toolkit.Uwp.UI.Media"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Page.Resources>
        <!-- Radial Brush -->
        <media:RadialGradientBrush x:Key="MyRadialBrush"
            GradientOrigin="0.5,0.5" Center="0.5,0.5"
            RadiusX="0.5" RadiusY="0.5" FallbackColor="Red">
            <GradientStop Color="#FFF0F8FF" Offset="0" />
            <GradientStop Color="#FF1E90FF" Offset="1" />
        </media:RadialGradientBrush>

    </Page.Resources>

    <Grid>
        <Button Content="Test" Background="{StaticResource MyRadialBrush}"
            HorizontalAlignment="Center" BorderBrush="Black"
            BorderThickness="1"/>
    </Grid>
</Page>

NewComputer:

Image from NewComputer

OldComputer:

Image from OldComputer

У меня есть обходной путь, который помещает рамку позади кнопки, с той же самой формой, что и кнопка, залитая запасным сплошным цветом.

Я бы скорее нашел в коде способ узнать, будет ли отображаться RadialGradientBrush, а затем изменить фон кнопки на SolidColorBrush, возможно, глядя на возможности графической системы?
Концептуально, что-то вроде Graphics.Capabilities.RadialGradientBrush.
Есть идеи, как это сделать?

Редактировать 1: Использование графической карты в OldComputer - теперь может отображать RadialGradientBrush. Похоже, графика G965. Я открыл вопрос об этом с WindowsCommunityToolkit.

1 Ответ

0 голосов
/ 11 июня 2019

Я бы скорее нашел в коде способ узнать, будет ли отображаться RadialGradientBrush, а затем изменил бы фон кнопки на SolidColorBrush, возможно, глядя на возможности графической системы?

Класс RadialGradientBrush имеет свойство FallbackColor.Цвет, используемый для рендеринга, если CompositionBrush не может быть отрисован.Это соответствует вашим требованиям.

<media:RadialGradientBrush x:Key="MyRadialBrush"
        GradientOrigin="0.5,0.5" Center="0.5,0.5"
        RadiusX="0.5" RadiusY="0.5" FallbackColor="White">
        <GradientStop Color="#FFF0F8FF" Offset="0" />
        <GradientStop Color="#FF1E90FF" Offset="1" />
</media:RadialGradientBrush>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...