【问题标题】:WPF repeatbutton in scrollbar only triggers IsPressed from the template, not the style滚动条中的 WPF 重复按钮仅从模板触发 IsPressed,而不是样式
【发布时间】:2010-08-03 16:33:11
【问题描述】:

我有一个小问题。我们希望在样式中和控件模板之外放置尽可能多的样式项,以使主题化更容易。所以对于滚动条的重复按钮,我可以让所有这些工作,但 IsPressed。这只适用于模板。

所以模板(基本上)是:

    <ControlTemplate x:Key="ScrollBarButtonCT" TargetType="{x:Type RepeatButton}">
    <Border 
        x:Name="borderRepeatButton"
        Margin="1" 
        CornerRadius="2" 
        Background="{TemplateBinding Background}">
        <Path x:Name="pathArrow"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Fill="{DynamicResource ThumbBrush}"
            Data="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" />
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsPressed" Value="true">
            <Setter TargetName="borderRepeatButton" Property="Background" Value="{DynamicResource ThumbPressedBrush}" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

风格是

    <Style x:Key="ScrollBarButtonStyle" TargetType="{x:Type RepeatButton}">
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Focusable" Value="false"/>
    <Setter Property="IsTabStop" Value="false"/>
    <Setter Property="Background" Value="{DynamicResource ScrollBarBGBrush}"/> <!-- borderRepeatButton -->
    <Setter Property="OpacityMask" Value="{DynamicResource ThumbBrush}"/> <!-- pathArrow-->
    <Setter Property="Template" Value="{StaticResource ScrollBarButtonCT}"/>
    <Style.Triggers>
        <!--<Trigger Property="IsPressed" Value="true">  .... this doesn't work coming from the style
            <Setter Property="Background" Value="{DynamicResource ThumbPressedBrush}" />
        </Trigger>-->
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="{DynamicResource ScrollBarDisabledBGBrush}"/>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="{DynamicResource ThumbHoverBrush}"/>
        </Trigger>
    </Style.Triggers>
</Style>

我无法让 IsPressed 使用这种风格。使用控件时,查看 Snoop IsPressed 会很好。我究竟做错了什么?谢谢!

【问题讨论】:

    标签: wpf templates triggers styles repeatbutton


    【解决方案1】:

    不知道为什么它不起作用,也许它需要静态资源?您可以尝试将所有样式集中在一个地方。

        <Style x:Key="xxxtyle" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Fill" TargetName="rectangle" Value="#FFD5D5D5"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    

    ps TargetType="typeName" == TargetType="{x:Type typename}"

    【讨论】:

    • s TargetType="typeName" == TargetType="{x:Type typename}" 是 .net 3.5 还是 4?
    【解决方案2】:

    我知道这是旧的,但事实证明这一定是模板中的错误。我们永远无法让它发挥作用,并且与内部的一些人交谈或多或少地证实了这一点。我们只是将值留在模板中,并在需要不同的重复按钮样式时通过交换模板来解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2012-06-02
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      相关资源
      最近更新 更多