2015-05-27 2 views
0

Я пытаюсь изменить кнопку, которую я создал, чтобы она отображала серый цвет вместо красного. Тем не менее, я могу изменить цвет переднего плана, но не тот, который назначен на который эллипса называется «buttonElipse»Создание новых стилей с помощью BasedOn в wpf

<Style x:Key="RedRoundButton" TargetType="Button"> 
    <Setter Property="OverridesDefaultStyle" Value="True"/> 
    <Setter Property="FontFamily" Value="SourceSansPro-Regular"/> 
    <Setter Property="FontSize" Value="36px"/> 
    <Setter Property="Foreground" Value="{StaticResource RedBrush}"/> 
    <Setter Property="Background" > 
     <Setter.Value> 
      <SolidColorBrush Color="White" /> 
     </Setter.Value> 
    </Setter> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid> 
        <Ellipse Stroke="{StaticResource RedBrush}" StrokeThickness="2" Fill="White" Name="buttonElipse"/> 
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Name="content"/> 
       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter TargetName="buttonElipse" Property="Fill" Value="White" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style x:Key="GreyRoundButton" TargetType="Button" BasedOn="{StaticResource RedRoundButton}"> 
    <Setter Property="Foreground" Value="{StaticResource GreyBrush}"/> 
</Style> 

Я также интересно, как мне нужно, чтобы справиться с той же проблемой, когда я хочу также переопределить цвета в триггерах?

ответ

1

Я думаю, что вы ищете TemplateBinding. Вы хотите изменить свойства элементов в шаблоне на основе значений свойств элемента управления, к которому применяется шаблон.

Учитывая шаблон у вас есть, я думаю, что все, что вам нужно сделать, это изменить то, что вы устанавливаете Stroke свойство на Ellipse:

<Ellipse Stroke="{TemplateBinding Foreground}" ... /> 

Затем в любое время изменить Foreground собственности на Button, вы также будете менять Stroke на Ellipse.

Что касается изменения свойства в триггере шаблона, то у вас должно быть хорошо. Если вы хотите, чтобы у вас была возможность настроить параметры мыши над цветом, вы можете расширить класс Button и добавить новый DependencyProperty, названный как-то вроде MouseOverBrush. Затем вы можете использовать привязку шаблона в триггере шаблона управления, чтобы изменить значение Ellipse, чтобы использовать значение этого свойства, когда мышь находится над Button.

Для получения дополнительной информации ознакомьтесь с Styling and Templating и Control Authoring.

0

То, что вы, вероятно, хотите сделать, это использовать словарь ресурсов для определения цвета

{StaticResource xxx}

например

<Setter TargetName="buttonElipse" Property="Fill" Value="{StaticResource ButtonEllipseOverBrush}" /> 

Затем вы можете переопределить Пуговицы ресурсы, обеспечивающие различный набор цветов.

Смежные вопросы