2013-04-22 66 views
1

我的WPF應用程序需要根據一天中的時間,日間模式和夜間模式有兩種不同的配色方案。我試圖修改由第三方WPF控件使用的模板,以便它可以使用不同的配色方案。WPF視覺狀態和改變顏色

在考慮中的控制使用視覺狀態來定義過渡選自於未選定:

<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Calendar:CalendarButton}"> 
     <Grid x:Name="LayoutRoot" Background="Transparent"> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="SelectionStates"> 
         <VisualState x:Name="Unselected"/> 
         <VisualState x:Name="Selected"/> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"/> 
       <Chromes:ButtonChrome x:Name="SelectionChrome" CornerRadius="1" Margin="2" RenderNormal="False" RenderSelected="{TemplateBinding IsSelected}" RenderFocused="{TemplateBinding IsFocused}" RenderHighlighted="{TemplateBinding IsMouseOver}" /> 
       <Border x:Name="TodayVisual" BorderThickness="1" CornerRadius="2" Margin="1" Visibility="Collapsed"> 
        <Border.BorderBrush> 
         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
          <GradientStop Color="#FF282828"/> 
          <GradientStop Color="#FF5F5F5F" Offset="1"/> 
         </LinearGradientBrush> 
        </Border.BorderBrush> 
       </Border> 
       <ContentPresenter x:Name="Content" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

我需要改變ButtonChrome控制的BackgroundBorderBrush,和Foreground屬性時的可視狀態爲「選定的」。我該怎麼做呢?

+0

我已經解決了這個問題,但事實證明,我不需要對'ButtonChrome'控件做任何事情。我需要修改的控件是'ContentPresenter',我得到了這個工作。基本上,@CodeWarrior是對的。 – 2013-04-23 16:40:17

回答

1

我發現在大多數帶有Chrome元素的控件(無論它們是Microsoft還是其他各方控件)上,都需要移除chrome元素,然後用手重新構造它們,因爲它們通常不提供方法來改變它們(即無法替代模板)。

但是,如果有其他人有更好的辦法,我全部都是耳朵。