1

我的 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>

当视觉状态为“已选择”时,我需要更改控件的BackgroundBorderBrushForeground属性。ButtonChrome我该怎么做呢?

4

1 回答 1

1

我发现在大多数具有 Chrome 元素的控件(无论是 Microsoft 还是其他方控件)上,都需要删除 chrome 元素,然后手动重新构建它,因为它们通常不提供更改它们的方法(即无法替代模板)。

但是,如果其他人有更好的方法,我会全力以赴。

于 2013-04-22T14:45:01.930 回答