2011-01-27 8 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

가장 쉬운 방법은 배경을 데이터 컨텍스트의 속성에 바인딩하고 거기에 색상을 설정하는 것입니다. 이 기술은 다음에서 설명합니다. 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

안녕하세요 릭, 유용한 의견과 답변을 보내 주셔서 다시 한 번 감사드립니다. 내가 제공 한 링크의 내용을 살펴보고 일을 처리하도록 노력하겠습니다. –