Как я узнаю в коде, что RadialGradientBrush не отображается правильно?

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

Новый компьютер: 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:

OldComputer:

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

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

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

1 ответ

Я предпочел бы найти способ в коде узнать, будет ли отображаться 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>
Другие вопросы по тегам