1

小さな問題があります。テーマを簡単にするために、スタイルとコントロールテンプレートの外側にできるだけ多くのスタイルアイテムを配置したいと思います。したがって、スクロールバーのリピートボタンについては、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を動作させることができません。スヌープで見るIsPressedは、コントロールを使用すると問題なく表示されます。私は何が間違っているのですか?ありがとう!

4

2 に答える 2

1

なぜ機能しないのかわかりません。静的リソースが必要なのかもしれません。これを試して、すべてのスタイルを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}"

于 2010-08-03T17:08:11.553 に答える
1

これは古いことは知っていますが、これはテンプレートのバグであるに違いありません。私たちはそれを機能させることができませんでした、そして内部の何人かの人々と話すことは多かれ少なかれそれを確認しました。テンプレートに値を残し、別のRepeatButtonスタイルが必要になったときにテンプレートを交換することで回避しました。

于 2012-03-15T17:50:15.873 に答える