代码之家  ›  专栏  ›  技术社区  ›  dex3703

滚动条中的wpf repeatButton仅从模板中释放触发器,而不是样式

  •  1
  • dex3703  · 技术社区  · 16 年前

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

    所以模板是(基本上):

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

    我受不了那种工作方式的束缚。使用控件时,在“snoop ispressed”中查找是正确的。我做错什么了?谢谢!

    2 回复  |  直到 14 年前
        1
  •  1
  •   Lukasz Madon    16 年前

    不知道为什么它不能工作,也许它需要静态资源?你可以试着把所有的款式放在一个地方。

        <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:类型typename”

        2
  •  1
  •   dex3703    14 年前

    我知道这很旧,但事实证明这一定是模板中的错误。我们无法让它工作,与内部的一些人交谈或多或少证实了这一点。我们只是将值留在模板中,并在需要不同的repeatButton样式时通过交换模板来处理它。

    推荐文章