2

コントロールの共通の外観を定義するスタイルを作成しました。これには、RadialGradientBrush、およびコーナー半径のある境界線が含まれます。

このスタイルを、このようにしたい関連するBorderコントロールに適用します。

スタイル内で の 3 色を指定しますが、指定された色の 1 つが実際のBorderコントロールRadialGradientBrushから色を取得できるようにしたいと考えています。

<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>

それで、 <Style> で DarkBlue と書いてあるところは、 のよう言いたいです。次に、実際のコントロールで定義された背景色を使用して、この値を置き換えます。Control.Backcolor

それが理にかなっていることを願っています。ありがとうリッチ。

4

1 に答える 1

1

あなたはそれをこのように解決することができます:

    <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();
    }
  }

このサンプルでは、​​境界線のBorderBrushを使用して、RadialGradientBrushの最も外側の色にします。ここでは、スタイルによって設定された値をオーバーライドするため、Backgroundプロパティを使用できません。よりクリーンな解決策は、独自のBorderを導出し、個別の色の値に対してDependencyPropertiesを作成することです...

于 2012-05-29T15:42:36.210 に答える