【问题标题】:WPF Visual States & changing colorsWPF 视觉状态和改变颜色
【发布时间】:2013-04-22 13:52:46
【问题描述】:

我的 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 控件的BackgroundBorderBrushForeground 属性。我该怎么做?

【问题讨论】:

  • 我已经解决了这个问题,但事实证明我不需要对ButtonChrome 控件做任何事情。我需要修改的控件是ContentPresenter,我得到了它的工作。基本上,@CodeWarrior 是对的。

标签: wpf styles


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2013-08-19
    • 2017-01-24
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多