0

我正在创建 UWP 应用程序。我有几个 LinearGradientBrushes,其中颜色直接在 LinearGradientBrush 参考中设置为 GradientStops。但是,我想在资源字典中定义一组预定义的颜色,我可以为每个 GradientStop 使用参考,因此更改应用程序的配色方案只需更改 SolidColorBrushes 的值:

   <!--Resource Dictionary  -->
<ResourceDictionary.ThemeDictionaries>
        <ResourceDictionary x:Key="Default">
             <SolidColorBrush x:Key="stop1" Color="#FF5A5A5A"/>
<SolidColorBrush x:Key="stop2" Color="#FF222222"/>
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
             <SolidColorBrush x:Key="stop1" Color="Black"/>
<SolidColorBrush x:Key="stop2" Color="White"/>
</ResourceDictionary>
<ResourceDictionary x:Key="HighContrast">
             <SolidColorBrush x:Key="stop1" Color="Black"/>
<SolidColorBrush x:Key="stop2" Color="White"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
    <!-- control Template-->
    <LinearGradientBrush x:Key="gradient">
      <GradientStop Color="{Binding Source={Themeresource stop1},Path=Color}" Offset="0"/>
      <GradientStop Color="{Binding Source={Themeresource stop2},Path=Color}" Offset="1"/>
    </LinearGradientBrush>

未找到 nam/key stop1 的给出错误

4

2 回答 2

0

上述问题可以通过使用绑定来解决

public LinearGradientBrush GradientBrush
    {
        get { return _GradientBrush; }
        set
        {
            _GradientBrush = value;
            RaisePropertyChanged("GradientBrush");
        }
    }
 GradientBrush = GetGradientBrush();

 public static LinearGradientBrush GetGradientBrush()
    {
        var grColor1 = ((SolidColorBrush)Application.Current.Resources["stop1"]).Color;
        var grColor2 = ((SolidColorBrush)Application.Current.Resources["stop2"]).Color;
        LinearGradientBrush lgBrush = new LinearGradientBrush();
        lgBrush.GradientStops.Add(new GradientStop() { Color = grColor1, Offset = 0.1 });
        lgBrush.GradientStops.Add(new GradientStop() { Color = grColor2, Offset = 0.9 });

        lgBrush.StartPoint = new Point(0, 1);
        lgBrush.EndPoint = new Point(1, 0);

       return lgBrush;
    }

<Grid Background="{Binding GradientBrush}" >
于 2020-07-03T10:02:57.697 回答
0

问题是stop1静态资源,但不是Themeresource。因此,我们需要将绑定源编辑为StaticResource.

<LinearGradientBrush x:Key="gradient">
    <GradientStop Color="{Binding Source={StaticResource stop1},Path=Color}" Offset="0"/>
    <GradientStop Color="{Binding Source={StaticResource stop2},Path=Color}" Offset="1"/>
</LinearGradientBrush>

更新

对于测试,如果我们将上面放在 中ResourceDictionary,它将起作用。

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Default">
                <SolidColorBrush x:Key="stop1" Color="#FF5A5A5A"/>
                <SolidColorBrush x:Key="stop2" Color="#FF222222"/>
            </ResourceDictionary>
            <ResourceDictionary x:Key="Dark">
                <SolidColorBrush x:Key="stop1" Color="Black"/>
                <SolidColorBrush x:Key="stop2" Color="White"/>
            </ResourceDictionary>
            <ResourceDictionary x:Key="HighContrast">
                <SolidColorBrush x:Key="stop1" Color="Black"/>
                <SolidColorBrush x:Key="stop2" Color="White"/>
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
   

 
    <!-- control Template-->
    <LinearGradientBrush x:Key="gradient">
        <GradientStop Color="{Binding Source={ThemeResource stop1},Path=Color}" Offset="0"/>
        <GradientStop Color="{Binding Source={ThemeResource stop2},Path=Color}" Offset="1"/>
    </LinearGradientBrush>
    </ResourceDictionary>
</Page.Resources>
于 2020-06-23T09:35:20.290 回答