2011-01-27 17 views
1

継承されたスタイルのテーマのスタイルを(ベースに継承されて)変更したいと思います。何か考えますか?これは、基本的には、wpfツールキットのマルチシリーズチャートの複数のスタイルを定義することです。WPF:継承されたテーマの要素のスタイルを変更します

<Style x:Key="A" TargetType="DVC:ColumnDataPoint"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="BorderBrush" Value="Transparent" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="IsTabStop" Value="False" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="DVC:ColumnDataPoint"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Opacity="0" x:Name="Root"> 
        <Grid Background="{TemplateBinding Background}" Name="columngrid"> 
         <Grid.Resources> 
          <Style x:Key="aquaboarder" TargetType="Border"> 
           <Style.Resources> 
            <LinearGradientBrush x:Key="BackBrush" StartPoint="0.5,0" EndPoint="0.5,1"> 
             <GradientStop Color="#B211B9D8" Offset="0.1" /> 
             <GradientStop Color="#FF0F56C7" Offset="0.9" /> 
            </LinearGradientBrush> 
           </Style.Resources> 
           <Setter Property="Background" Value="{StaticResource BackBrush}"/> 
          </Style> 
         </Grid.Resources> 
         <Border Name="columnBorder" BorderBrush="Transparent" BorderThickness="1" CornerRadius="20,20,0,0" Style="{StaticResource aquaboarder}"> 
         </Border> 
        </Grid>            
        <ToolTipService.ToolTip> 
         <ContentControl Content="{TemplateBinding FormattedDependentValue}" /> 
        </ToolTipService.ToolTip> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

そして、次のように継承されたスタイルが行く:

<Style x:Key="B" BasedOn="{StaticResource A}" TargetType="DVC:ColumnDataPoint"> 
    <Style.Resources> 
     <LinearGradientBrush x:Key="BackBrush" StartPoint="0.5,0" EndPoint="0.5,1"> 
      <GradientStop Color="#B24DE509" Offset="0.1" /> 
      <GradientStop Color="#FF238910" Offset="0.9" /> 
     </LinearGradientBrush> 
    </Style.Resources>   
</Style> 

が、私は「スタイルB」で定義されているbackbrushを使用するために、「スタイルA」でcolumngridを設定するコードは次のように見えます。私はスタイルBのより多くのものをやりたいとは思わない。継承されたスタイルの多くは後でこのスタイルを変更するだけで定義されるからだ。

答えて

2

既に利用可能な完全に有用なBackgroundプロパティを浪費しており、同じ目的を果たす新しいプロパティを作成しようとしています。コントロールテンプレートをオーバーライドしているので、チャート作成の目的にはBackgroundを使用してください。スタイルを透明に設定する代わりに、派生スタイルを設定するか、Backgroundを上書きし、{StaticResource Backbrush}を使用している現在のコントロールテンプレートで{TemplateBinding Background}を使用します。グリッドの背景が透明になることが明確であるように見えるので、をGrid要素にもう一度使用すると削除できます。

+0

こんにちはリック、お返事ありがとう、遅いコメントには申し訳ありません。私はちょうど貴重なアイディアを得て、チャートの作成に実装しました。私は別の問題があります、私はすべてのチャートが共通の色のテーマを共有するようにしたい。したがって、私はさまざまな列の背景色をチャートパレットで定義されている色から継承したいと思います。この場合、私は何をすべきですか?現在、データポイントシリーズタイプ(たとえば、列データポイント)をオーバーライドするとすぐに、オレンジ色のみを取得します。前もって感謝します。 –

+1

最も簡単な方法は、背景をデータコンテキスト内のプロパティにバインドし、そこに色を設定することです。この方法については、次のURLで説明しています。http://blogs.msdn.com/b/delay/archive/2009/02/04/columns-of-a-different-color-customizing-the-appearance-of-silverlight-charts- with-re-templating-and-mvvm.aspx –

+0

こんにちはリック、あなたの役に立つコメントと答えに感謝しています。私はあなたが提供したリンクの中のコンテンツを見て、物事を働かせようとします:-) –

関連する問題