1

我使用 RadialGradientBrush 作为按钮的背景。在一台计算机上,它运行良好。另一方面,背景是透明的。

新电脑:英特尔 i7-8700、16Gb 内存、64 位操作系统、显卡 - Nvidia GeForce GTx1050Ti

OldComputer:英特尔 6300、2Gb 内存、32 位操作系统、显卡 - 英特尔 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

老电脑:

图片来自旧电脑

我有一个解决方法,即在按钮后面放置一个边框,与按钮的形状相同,填充后备纯色。

我宁愿在代码中找到一种方法来知道是否要显示 RadialGradientBrush,然后将按钮背景更改为 SolidColorBrush,也许看看图形系统的功能?
从概念上讲,类似于 Graphics.Capabilities.RadialGradientBrush。
任何想法如何做到这一点?

编辑 1:在 OldComputer 中使用显卡 - 现在可以显示 RadialGradientBrush。貌似是G965显卡。我使用 WindowsCommunityToolkit 打开了一个关于此的问题。

4

1 回答 1

0

我宁愿在代码中找到一种方法来知道是否要显示 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>
于 2019-06-11T04:19:55.347 回答