2011-07-01 9 views
1

私は基本スタイルを作成しています。私はベーススタイルを実装するために継承を使用しています。私は派生クラスにプロパティを追加する方法を知っていますが、プロパティを変更するだけではわかりません。"スーパー/ベース"スタイルwpfのプロパティを変更

レットは、私は、この基本スタイルを持っていると言う:私はあなたに例を挙げましょう

 <!-- SrollViewer ScrollBar Repeat Buttons (at each end) --> 
    <Style x:Key="ScrollBarLineButton" TargetType="{x:Type RepeatButton}"> 
     <Setter Property="SnapsToDevicePixels" Value="True"/> 
     <Setter Property="OverridesDefaultStyle" Value="true"/> 
     <Setter Property="Focusable" Value="false"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type RepeatButton}"> 
        <Border 
         Name="Border" 
         Margin="1" 
         CornerRadius="2" 
         Background="WhiteSmoke"   
         BorderThickness="1"> 
         <Image Stretch="Uniform" Source="/FilesPro;component/Images/scrollArrow.png" Height="40" VerticalAlignment="Center" HorizontalAlignment="Center" Width="52" > 
          <Image.RenderTransform> 
           <TransformGroup> 
            <ScaleTransform ScaleY="-1" /> 
            <TranslateTransform Y="40"/> 
            <SkewTransform/> 
            <RotateTransform/> 
            <TranslateTransform/> 
           </TransformGroup> 
          </Image.RenderTransform> 
         </Image> 
         <!-- 
         <Path 
          HorizontalAlignment="Center" 
          VerticalAlignment="Center" 
          Fill="{StaticResource GlyphBrush}" 
          Data="{Binding Path=Content, 
           RelativeSource={RelativeSource TemplatedParent}}" > 
         </Path> 
         --> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 
私はScrollBarLineButtonとしてではなく、画像transfromのscaleYの代わりに= 1と同じ性質を持つ新しいスタイルを作成したいと思います

-1の。

私が行うとき:

 <Style x:Key="ScrollBarLineButtonVerticalUp" BasedOn="{StaticResource ScrollBarLineButton}" TargetType="{x:Type RepeatButton}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type RepeatButton}"> 
        <Border>        
         <Image Stretch="Uniform" Source="/FilesPro;component/Images/scrollArrow.png" Height="40" VerticalAlignment="Center" HorizontalAlignment="Center" Width="52" > 
          <Image.RenderTransform> 
           <TransformGroup> 
            <ScaleTransform ScaleY="1" /> 
            .... 
            ... 

国境はもはや私のスタイルを継承し、ただ一つの特性を変更することができますどのように...その基本スタイルマージン、背景色などを持っています。私はペーストをコピーすることができますが、私はこれをたくさん変えるでしょう。私が1つの場所でそれを変更すると、それは他のすべての場所で変わるのが便利です。

答えて

5

あなたはこのような何かを行うにはDynamicResourceの参照を作成することができ、ここでの例です:

<StackPanel> 
    <StackPanel.Resources> 
     <Style x:Key="ButtonStyleA" TargetType="{x:Type Button}"> 
      <Style.Resources> 
       <SolidColorBrush x:Key="TextBrush" Color="Yellow" /> 
      </Style.Resources> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Button}"> 
         <Border CornerRadius="10" BorderThickness="1" BorderBrush="Red"> 
          <ContentPresenter TextElement.Foreground="{DynamicResource TextBrush}"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="ButtonStyleB" TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyleA}"> 
      <Style.Resources> 
       <SolidColorBrush x:Key="TextBrush" Color="Blue" /> 
      </Style.Resources> 
     </Style> 
    </StackPanel.Resources> 
    <Button Style="{StaticResource ButtonStyleA}" Content="Lorem Ipsum" /> 
    <Button Style="{StaticResource ButtonStyleB}" Content="Lorem Ipsum" /> 
</StackPanel> 

StyleBTextBrushは同様に、それは、このリソースを参照するため、変更するテンプレートを引き起こす上書きされます。

関連する問題