修改控件模板时保留主题控件样式

时间:2018-03-10 17:08:57

标签: c# wpf xaml user-interface mvvm

我试图将一些命令绑定到Slider.Thumb,这就是我目前的做法:

<Style x:Key="BasicSliderStyle" TargetType="{x:Type customControls:ThumbDragSlider}" BasedOn="{StaticResource {x:Type Slider}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Slider}">
                <Grid>
                    <Track x:Name="PART_Track">
                        <Track.Thumb>
                            <Thumb x:Name="Thumb">
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="MouseEnter">
                                        <command:EventToCommand Command="{Binding PositionSliderThumbMouseEnterCommand}" PassEventArgsToCommand="True"/>
                                    </i:EventTrigger>
                                    <i:EventTrigger EventName="DragDelta">
                                        <command:EventToCommand Command="{Binding PositionThumbDragDeltaCommand}" CommandParameter="{Binding ElementName=sMovieSkipSlider}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </Thumb>
                        </Track.Thumb>
                    </Track>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

问题是我还有一个主题应用于我的控件,如果我使用这个样式,它的样式和效果也被删除,有没有办法将当前的应用程序主题样式保持在控件上同时也是能够添加事件触发器并附加如上所示的命令吗?

P.S - 由于这是一个派生自Slider的自定义控件,因此我将滑块的默认主题样式设置为

Style="{StaticResource {x:Type Slider}}"

2 个答案:

答案 0 :(得分:1)

如果要为该控件保留相同的主题,则只能使用样式中的触发器而不能使用模板中的触发器。 这意味着在您的情况下这是不可能的。您可以做的是复制主题的整个样式并在那里指定触发器。

答案 1 :(得分:1)

您可以扩展自定义样式。而不是:

BasedOn="{StaticResource {x:Type Slider}}"

做的:

BasedOn="{StaticResource MyCustomSlider}"