Кнопка повтора WPF в полосе прокрутки вызывает только IsPressed из шаблона, а не из - PullRequest
1 голос
/ 03 августа 2010

У меня есть небольшая проблема.Мы хотели бы разместить как можно больше стилистических элементов в стилях и за пределами шаблонов элементов управления, чтобы облегчить оформление тем.Так что для кнопки повтора полосы прокрутки я могу заставить все это работать, но 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 поднимается очень хорошо при использовании элемента управления.Что я делаю неправильно?Спасибо!

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Я знаю, что это старый, но оказывается, это должно быть ошибка в шаблоне. Мы никогда не могли заставить это работать, и разговор с некоторыми людьми внутри более или менее подтвердил это. Мы просто оставили значение в шаблоне и обошли его, меняя шаблоны, когда нам нужен другой стиль RepeatButton.

1 голос
/ 03 августа 2010

Не знаю, почему это не работает, может быть, ему нужен статический ресурс? Вы можете попробовать это, чтобы получить все стили в одном месте.

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

...