首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有内容模板的wpf控件在鼠标上更改背景

带有内容模板的wpf控件在鼠标上更改背景
EN

Stack Overflow用户
提问于 2020-05-26 17:33:04
回答 1查看 125关注 0票数 0

我对这件事很陌生。下面的代码完美地显示了按钮,但我无法让按钮内的矩形填充在鼠标上更改。我尝试过几种不同的方法,但都没有用。我在controltemplate.triggers和style.triggers都试过一次。我做错了什么?

代码语言:javascript
复制
    <Window.Resources>
        <LinearGradientBrush x:Key="buttonbkgrnd" StartPoint="0,0" EndPoint="1,1">
            <GradientStop Color="#FF7D7DF1" Offset="0.0" />
            <GradientStop Color="white" Offset="0.25" />
            <GradientStop Color="#FF7D7DF1" Offset="0.75" />
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="buttonhoverbkgrnd" StartPoint="0,0" EndPoint="1,1">
            <GradientStop Color="#FF28D366" Offset="0.0" />
            <GradientStop Color="white" Offset="0.25" />
            <GradientStop Color="#FFC4C4F7" Offset="0.75" />
        </LinearGradientBrush>
        <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
            <Setter Property="Foreground" Value="Black"/>
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <Rectangle x:Name="btnback" StrokeThickness="8" RadiusY="10" RadiusX="10" Fill="{StaticResource buttonbkgrnd}" >
                                <Rectangle.Stroke>
                                    <LinearGradientBrush>
                                        <GradientStop Offset="0" Color="Gray"/>
                                        <GradientStop Offset="0.25" Color="LightGray"/>
                                        <GradientStop Offset="0.75" Color="Gray"/>
                                    </LinearGradientBrush>
                                </Rectangle.Stroke>
                                <Rectangle.Style>
                                    <Style TargetType="{x:Type Rectangle}">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=IsMouseOver,
                                     RelativeSource={RelativeSource FindAncestor,
                                     AncestorType={x:Type Button}}}" Value="true">
                                                <Setter Property="Fill" Value="{StaticResource buttonhoverbkgrnd}" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Rectangle.Style>
                            </Rectangle>

                            <ContentPresenter
                                Margin = "10"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                            />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
...
window stuff ...
...
        <WrapPanel Margin="0,50,0,0" HorizontalAlignment="Center">
            <Button x:Name="BtnGo" Content="Go" HorizontalAlignment="Center" Margin="5,5,15,5" VerticalAlignment="Top" Width="172" Height="60" RenderTransformOrigin="1.881,0.729" FontSize="20" Click="BtnGo_Click" TabIndex="3" IsDefault="True" AutomationProperties.AcceleratorKey="g"/>
            <Button x:Name="BtnCancel" Content="Cancel" HorizontalAlignment="Center" Margin="15,5,5,5" VerticalAlignment="Top" Width="172" Height="60" RenderTransformOrigin="1.881,0.729" FontSize="20" TabIndex="4" AutomationProperties.AcceleratorKey="c" Click="BtnCancel_Click" />
        </WrapPanel>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-26 17:43:54

代码语言:javascript
复制
<Rectangle ... Fill="{StaticResource buttonbkgrnd}">

这里,Fill属性具有本地值。Style.Trigger不能覆盖它。

你可以..。

..。删除该本地值并使用样式设置器:

代码语言:javascript
复制
<Rectangle.Style>
    <Style TargetType="{x:Type Rectangle}">
        <Setter Property="Fill" Value="{StaticResource buttonbkgrnd}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsMouseOver,
                                           RelativeSource={RelativeSource FindAncestor,
                                           AncestorType={x:Type Button}}}" Value="true">
                <Setter Property="Fill" Value="{StaticResource buttonhoverbkgrnd}" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Rectangle.Style>

..。保持本地值,并将ContentTemplate.Trigger与TargetName一起使用:

代码语言:javascript
复制
<ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="true">
        <Setter TargetName="btnback" Property="Fill" Value="{StaticResource buttonhoverbkgrnd}" /> 
    </Trigger>
</ControlTemplate.Triggers>

在这种情况下,<Rectangle.Style>变得多余,可以删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62028059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档