【问题标题】:WPF/Styles: Setting Property Values of Template ElementsWPF/Styles:设置模板元素的属性值
【发布时间】:2010-11-11 13:58:12
【问题描述】:

假设我有这样的风格

<Style x:Key="NotificationItemTemplate" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <DockPanel LastChildFill="False">
                    <DockPanel.Background>
                        <LinearGradientBrush>
                            <GradientStop Offset="0" Color="#FF565656" /> <!-- How to change color values -->
                            <GradientStop Offset="1" Color="#FF353535" />
                        </LinearGradientBrush>
                    </DockPanel.Background>
                    ...
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如何将上面标记的渐变色标的颜色值设置为不同的颜色,例如在 MouseOver 上,我知道我使用了触发器,但如何引用该颜色值?

【问题讨论】:

    标签: wpf templates styles


    【解决方案1】:

    很遗憾,我不确定您是否可以为单个渐变停止做到这一点。您可能必须触发更改整个背景画笔:

    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <DockPanel LastChildFill="False" x:Name="dock">
                        <DockPanel.Background>
                            <LinearGradientBrush>
                                <GradientStop Offset="0" Color="#FF565656" />
                                <!-- How to change color values -->
                                <GradientStop Offset="1" Color="#FF353535" />
                            </LinearGradientBrush>
                        </DockPanel.Background>
                        <ContentPresenter />
                    </DockPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="dock" Property="Background">
                                <Setter.Value>
                                    <LinearGradientBrush>
                                        <GradientStop Offset="0" Color="#00CDFFFF" />
                                        <!-- How to change color values -->
                                        <GradientStop Offset="1" Color="#FF343465" />
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    

    【讨论】:

    • 有人刚刚对此投了赞成票,回顾这个​​问题,可以做的另一件事是创建一个“颜色”资源,可以由渐变停止重复使用。这样,如果您只有一个不同的渐变停止。常见的梯度停止点都可以从单个资源中进行管理,而不是在多个位置/触发器中维护。
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2014-07-31
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2011-03-31
    相关资源
    最近更新 更多