求助,为什么控件有时候设置的trigger无效?

JimCarter
博客专家认证
2017-03-05 02:31:48

<Border BorderBrush="Blue" BorderThickness="1" CornerRadius="2,2,2,2" Style="{DynamicResource BorderStyle1}">

<Border.Resources>

<Style x:Key="BorderStyle1" TargetType="{x:Type Border}">

<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="5"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property="BorderBrush" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Border.Resources>
<StackPanel Width="20" Height="20">
<Image Width="20" Height="20" Source="Images/qzone.png"></Image>
</StackPanel>
</Border>

我设置了如上的触发器,当鼠标滑入border所在区域时,没效果。离开border区域时,也没有反应。其他类似控件我都有遇到过这种问题,不知道大家怎么看,求助!
...全文
569 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Veary 2017-03-10
  • 打赏
  • 举报
回复
引用 13 楼 catshitone 的回复:
[quote=引用 12 楼 u011785544 的回复:] [quote=引用 9 楼 catshitone 的回复:] 现在终于搞清问题了,Trigger之所以不管用,是因为已经再<Border >标签里定义了BorderBrush和BorderThickness了,Trigger中再定义这两个属性,就不会管用了,会被之前定义好的覆盖掉。 经摸索,实际的使用方式应该是这样子的:

<Border Width="50" Height="50" Style="{DynamicResource BorderStyle2}">
                <Border.Resources>
                    <Style x:Key="BorderStyle2" TargetType="{x:Type Border}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" Value="Black"></Setter>
                                <Setter Property="Background" Value="Green"></Setter>
                                <Setter Property="BorderThickness" Value="6"></Setter>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="False">
                                <Setter Property="BorderBrush" Value="Blue"></Setter>
                                <Setter Property="Background" Value="Yellow"></Setter>
                                <Setter Property="BorderThickness" Value="8"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Resources>
            </Border>
凡是IsMouseOver触发器中,涉及到的属性,都从<border>标签中,去掉。同时也要定义IsMouseOver的False触发器,否则鼠标放上去的时候还是什么动静都没有。
真是难为你了 我早已经提示你了 把控件上的BorderBrush和BorderThickness放入到Style中。。。[/quote] 好吧 谢谢了,当初确实不太明白你说的什么意思,我看你给我的例子都写在border里了。[/quote] 我是尊重你原来的内容 然后把我写的内容注释掉了 忘记标记了
JimCarter 2017-03-10
  • 打赏
  • 举报
回复
引用 12 楼 u011785544 的回复:
[quote=引用 9 楼 catshitone 的回复:] 现在终于搞清问题了,Trigger之所以不管用,是因为已经再<Border >标签里定义了BorderBrush和BorderThickness了,Trigger中再定义这两个属性,就不会管用了,会被之前定义好的覆盖掉。 经摸索,实际的使用方式应该是这样子的:

<Border Width="50" Height="50" Style="{DynamicResource BorderStyle2}">
                <Border.Resources>
                    <Style x:Key="BorderStyle2" TargetType="{x:Type Border}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" Value="Black"></Setter>
                                <Setter Property="Background" Value="Green"></Setter>
                                <Setter Property="BorderThickness" Value="6"></Setter>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="False">
                                <Setter Property="BorderBrush" Value="Blue"></Setter>
                                <Setter Property="Background" Value="Yellow"></Setter>
                                <Setter Property="BorderThickness" Value="8"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Resources>
            </Border>
凡是IsMouseOver触发器中,涉及到的属性,都从<border>标签中,去掉。同时也要定义IsMouseOver的False触发器,否则鼠标放上去的时候还是什么动静都没有。
真是难为你了 我早已经提示你了 把控件上的BorderBrush和BorderThickness放入到Style中。。。[/quote] 好吧 谢谢了,当初确实不太明白你说的什么意思,我看你给我的例子都写在border里了。
exception92 2017-03-09
  • 打赏
  • 举报
回复
在使用 资源文件的时候 尽量使用DynamicResource,而本页面使用StaticResource.
Veary 2017-03-09
  • 打赏
  • 举报
回复
引用 9 楼 catshitone 的回复:
现在终于搞清问题了,Trigger之所以不管用,是因为已经再<Border >标签里定义了BorderBrush和BorderThickness了,Trigger中再定义这两个属性,就不会管用了,会被之前定义好的覆盖掉。 经摸索,实际的使用方式应该是这样子的:

<Border Width="50" Height="50" Style="{DynamicResource BorderStyle2}">
                <Border.Resources>
                    <Style x:Key="BorderStyle2" TargetType="{x:Type Border}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" Value="Black"></Setter>
                                <Setter Property="Background" Value="Green"></Setter>
                                <Setter Property="BorderThickness" Value="6"></Setter>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="False">
                                <Setter Property="BorderBrush" Value="Blue"></Setter>
                                <Setter Property="Background" Value="Yellow"></Setter>
                                <Setter Property="BorderThickness" Value="8"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Resources>
            </Border>
凡是IsMouseOver触发器中,涉及到的属性,都从<border>标签中,去掉。同时也要定义IsMouseOver的False触发器,否则鼠标放上去的时候还是什么动静都没有。
真是难为你了 我早已经提示你了 把控件上的BorderBrush和BorderThickness放入到Style中。。。
JimCarter 2017-03-08
  • 打赏
  • 举报
回复
引用 7 楼 u011785544 的回复:
具体需求得具体分析咯 我试的是光是border 好使的
好的 谢谢了 我再研究研究
Veary 2017-03-08
  • 打赏
  • 举报
回复
具体需求得具体分析咯 我试的是光是border 好使的
JimCarter 2017-03-08
  • 打赏
  • 举报
回复
另外style里尽量不要使用DynamicResource,用StaticResource,否则有时候会不灵
JimCarter 2017-03-08
  • 打赏
  • 举报
回复
现在终于搞清问题了,Trigger之所以不管用,是因为已经再<Border >标签里定义了BorderBrush和BorderThickness了,Trigger中再定义这两个属性,就不会管用了,会被之前定义好的覆盖掉。 经摸索,实际的使用方式应该是这样子的:

<Border Width="50" Height="50" Style="{DynamicResource BorderStyle2}">
                <Border.Resources>
                    <Style x:Key="BorderStyle2" TargetType="{x:Type Border}">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" Value="Black"></Setter>
                                <Setter Property="Background" Value="Green"></Setter>
                                <Setter Property="BorderThickness" Value="6"></Setter>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="False">
                                <Setter Property="BorderBrush" Value="Blue"></Setter>
                                <Setter Property="Background" Value="Yellow"></Setter>
                                <Setter Property="BorderThickness" Value="8"></Setter>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </Border.Resources>
            </Border>
凡是IsMouseOver触发器中,涉及到的属性,都从<border>标签中,去掉。同时也要定义IsMouseOver的False触发器,否则鼠标放上去的时候还是什么动静都没有。
Veary 2017-03-07
  • 打赏
  • 举报
回复
PS:把控件上的BorderBrush和BorderThichness都写到Style中。


<Border BorderBrush="Blue" BorderThickness="5"  CornerRadius="2,2,2,2" Style="{DynamicResource BorderStyle1}">
            <Border.Resources>
                <Style x:Key="BorderStyle1" TargetType="{x:Type Border}">
                    <!--<Setter Property="BorderBrush" Value="Blue" />
                    <Setter Property="BorderThickness" Value="5" />-->
                    <!--<Setter Property="Background" Value="Transparent" />-->
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderThickness" Value="5"></Setter>
                            <Setter Property="BorderBrush" Value="Red"></Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Resources>
            <StackPanel Width="20" Height="20">
                <!--<Image Width="20" Height="20" Source="Images/qzone.png"></Image>-->
            </StackPanel>
        </Border>
Veary 2017-03-07
  • 打赏
  • 举报
回复
设置一个Background就好了 透明也行 要不然只有悬浮在边框(现在看来是1像素)上才可以.
JimCarter 2017-03-07
  • 打赏
  • 举报
回复
引用 1 楼 Libby1984 的回复:
你设置一下Border的Background为透明
求帮助
JimCarter 2017-03-07
  • 打赏
  • 举报
回复
引用 3 楼 u011785544 的回复:
PS:把控件上的BorderBrush和BorderThichness都写到Style中。


<Border BorderBrush="Blue" BorderThickness="5"  CornerRadius="2,2,2,2" Style="{DynamicResource BorderStyle1}">
            <Border.Resources>
                <Style x:Key="BorderStyle1" TargetType="{x:Type Border}">
                    <!--<Setter Property="BorderBrush" Value="Blue" />
                    <Setter Property="BorderThickness" Value="5" />-->
                    <!--<Setter Property="Background" Value="Transparent" />-->
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderThickness" Value="5"></Setter>
                            <Setter Property="BorderBrush" Value="Red"></Setter>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </Border.Resources>
            <StackPanel Width="20" Height="20">
                <!--<Image Width="20" Height="20" Source="Images/qzone.png"></Image>-->
            </StackPanel>
        </Border>
求帮助
JimCarter 2017-03-07
  • 打赏
  • 举报
回复

<Border x:Name="borderQZone" BorderBrush="Cyan" BorderThickness="0" CornerRadius="2,2,2,2" Width="20" Height="20" Style="{DynamicResource BorderStyle1}" Background="#00000000">
<Border.Resources>
<Style x:Key="BorderStyle1" TargetType="{x:Type Border}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="5"></Setter>
<Setter Property="BorderBrush" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Border.Resources>
<StackPanel>
<Image x:Name="imgQzone" Width="20" Height="20" Source="Images/qzone.png" MouseLeftButtonDown="imgQzone_MouseLeftButtonDown"/>

</StackPanel>
</Border>

border的背景设置为透明,borderbrush和borderthichness也都写入到style中,鼠标放上去还是没有反应,求助

如图所示的那个小星星,鼠标放上去什么变化都没有
  • 打赏
  • 举报
回复
你设置一下Border的Background为透明

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧