基于使用该样式的控件中的属性修改 WPF 样式中的参数



我创建了一个样式,用于定义控件的常见外观。这包括一个RadialGradientBrush和一个带有角半径的边框。

我将这种样式应用于我想要看起来像这样的相关边框控件。

在样式中,我指出RadialGradientBrush的 3 种颜色,但是,我希望能够使指定的一种颜色从实际的边框控件中获取颜色。

<Style x:Key='ButtonStyle' TargetType='Border'>
    <Setter Property='CornerRadius' Value='10' />
    <Setter Property='Margin' Value='2' />
    <Setter Property='BorderThickness' Value='1'/>
    <Setter Property='BorderBrush' Value='White'/>
    <Setter Property='Background'>
        <Setter.Value>
            <RadialGradientBrush >
                <GradientStop Color='DarkBlue' Offset='0.9'/>
                <GradientStop Color='White' Offset='0.7'/>
                <GradientStop Color='Black' Offset='0.3' />
            </RadialGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

所以,在它说<风格>深蓝的地方,我希望它说Control.Backcolor .然后,它将使用实际控件中定义的背景色来替换此值。

希望这是有道理的。谢谢富。

你可以这样解决它:

    <Grid>
    <Grid.Resources>
      <local:ColorConverter x:Key="myColorConverter"/>
      <Style x:Key="ButtonStyle" TargetType="{x:Type Border}">
        <Setter Property="CornerRadius" Value="10" />
        <Setter Property="Margin" Value="2" />
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Background">
          <Setter.Value>
            <RadialGradientBrush >
              <GradientStop Color="{Binding Path=BorderBrush,Converter={StaticResource myColorConverter}, RelativeSource={RelativeSource AncestorType={x:Type Border}}}" Offset="0.9" />
              <GradientStop Color='White' Offset='0.7'/>
              <GradientStop Color='Black' Offset='0.3' />
                     </RadialGradientBrush>
          </Setter.Value>
        </Setter>
      </Style>
    </Grid.Resources>
      <StackPanel x:Name="myStackPanel">
        <Border x:Name="myBorder1" Style="{StaticResource ButtonStyle}" BorderBrush="Yellow" Height="25"></Border>
        <Border x:Name="myBorder2" Style="{StaticResource ButtonStyle}" BorderBrush="Green" Height="25"></Border>
      </StackPanel>
  </Grid>

你需要一个转换器来访问画笔的颜色。

  public class ColorConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
      if (value is SolidColorBrush)
      {
        var brush = value as SolidColorBrush;
        return brush.Color;
      }
      return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
      throw new NotImplementedException();
    }
  }

在此示例中,我使用边框的边框画笔作为径向渐变画笔的最外层颜色。不能在此处使用 Background 属性,因为它会覆盖样式设置的值。一个更干净的解决方案是派生您自己的边框并为您的不同颜色值创建依赖项属性......

相关内容

  • 没有找到相关文章

最新更新