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

Я хочу, чтобы установить columngrid в «стиле А» использовать backbrush, определенный в «стиле B» , Мне не нравится делать больше вещей в стиле B, так как у меня будет много унаследованных стилей, которые будут просто изменены после этого.

ответ

2

Вы тратите впустую совершенно полезное свойство Background, которое уже доступно и пытается создать новый, который служит для этой же цели. Поскольку вы переопределяете шаблон управления, просто используйте Background с целью создания графиков. Вместо того, чтобы настраивать его на прозрачный в вашем стиле, пусть ваш производный стиль установлен или переопределен Background, а затем используйте {TemplateBinding 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- с-re-templating-and-mvvm.aspx –

+0

Привет, Рик, еще раз спасибо за ваши полезные комментарии и ответы. Я просмотрю контент в указанной вами ссылке и попытаюсь заставить все работать. :-) –