当前位置:编程学习 > C#/ASP.NET >>

wpf触发器的优先级是怎么回事?

这段代码,IsPressed被IsFocused覆盖了。当不设置IsFocused的时候,按按钮就没问题,当设置了IsFocused的时候,IsPressed就没法触发了。请问这个该如何解决?

<Trigger SourceName="btnHead" Property="IsPressed" Value="True">
                    <Setter TargetName="itemBackground" Property="Background" Value="#92C0E0"/>
                    <Setter TargetName="itemBackground" Property="BorderBrush" Value="#92C0E0"/>
                </Trigger>
                <Trigger SourceName="btnHead" Property="IsFocused" Value="True">
                    <Setter TargetName="itemBackground" Property="Background" Value="#E6F2FA"/>
                    <Setter TargetName="itemBackground" Property="BorderBrush" Value="#B1D6F0"/>
                </Trigger>
                <Trigger SourceName="btnHead" Property="IsMouseOver" Value="True">
                    <Setter TargetName="itemBackground" Property="Background" Value="#CDE6F7"/>
                    <Setter TargetName="itemBackground" Property="BorderBrush" Value="#CDE6F7"/>
                </Trigger>
--------------------编程问答-------------------- 补充一下,点击按钮的时候,它不变色,也不知道IsPressed到底触发过没有。 --------------------编程问答-------------------- 人们呢? --------------------编程问答-------------------- 这个是事件触发顺序的问题的,同时定义两个IsPressed其实是触发了的,只是IsPressed触发时设置的颜色又被IsFocused事件触发时修改过来了,因为IsPressed事件发生在IsFocused事件之前,具体可以参考MSDN焦点的介绍:
http://msdn.microsoft.com/zh-cn/library/vstudio/aa969768.aspx --------------------编程问答-------------------- 我先去看看,谢谢啦 --------------------编程问答--------------------
引用 3 楼 lizhi3186575 的回复:
这个是事件触发顺序的问题的,同时定义两个IsPressed其实是触发了的,只是IsPressed触发时设置的颜色又被IsFocused事件触发时修改过来了,因为IsPressed事件发生在IsFocused事件之前,具体可以参考MSDN焦点的介绍:
http://msdn.microsoft.com/zh-cn/library/vstudio/aa969768.aspx

问题是我现在需要在focused状态下一种背景色,然后pressed按下的时候还要改变一下背景色,这个在xaml里面应该如何处理呢?是不是不能处理? --------------------编程问答-------------------- 求助啊,亲们 --------------------编程问答-------------------- --------------------编程问答--------------------   <ControlTemplate x:Key="MenubuttonTemplate" TargetType="{x:Type Button}">
            <Grid>
                <Rectangle x:Name="outRect" Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                 Path=Background }" Visibility="Visible">
                </Rectangle>
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Margin="{TemplateBinding Padding}" Text="{TemplateBinding Content}"
                           FontFamily="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                 Path=FontFamily }"
                FontSize="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                 Path=FontSize }"  />
                <Path  x:Name="BorderPath" Stroke="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                 Path=BorderBrush }" StrokeThickness="1" >
                    <Path.Data>
                        <PathGeometry>
                            <PathFigure StartPoint="0,29">
                                <PathFigure.Segments  >
                                    <LineSegment   Point="0,0"/>
                                    <LineSegment   Point="82,0"/>
                                    <LineSegment   Point="82,29"/>
                                </PathFigure.Segments>
                            </PathFigure>
                        </PathGeometry>
                    </Path.Data>
                </Path>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger     Property="Button.IsPressed"     Value="True">
                    <Setter Property="Button.Background" Value="#92C0E0"/>
                    <Setter Property="Button.BorderBrush" Value="#92C0E0"/>
                </Trigger>
                <Trigger  Property="Button.IsFocused" Value="True">
                    <Setter  Property="Button.Background" Value="#E6F2FA"/>
                    <Setter  Property="Button.BorderBrush" Value="#B1D6F0"/>
                </Trigger>
                <Trigger  Property="Button.IsMouseOver" Value="True">
                    <Setter  Property="Button.Background" Value="#CDE6F7"/>
                    <Setter Property="Button.BorderBrush" Value="#CDE6F7"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate> --------------------编程问答--------------------
引用 8 楼 rui_china 的回复:
 

        <Button  HorizontalAlignment="Left"  Template="{StaticResource MenubuttonTemplate}"  Content="确定"     Margin="28,211,0,0" Name="button1" VerticalAlignment="Top"    FontSize="14" Click="button1_Click" /> --------------------编程问答--------------------
引用 5 楼 ziyuexuan 的回复:
Quote: 引用 3 楼 lizhi3186575 的回复:

这个是事件触发顺序的问题的,同时定义两个IsPressed其实是触发了的,只是IsPressed触发时设置的颜色又被IsFocused事件触发时修改过来了,因为IsPressed事件发生在IsFocused事件之前,具体可以参考MSDN焦点的介绍:
http://msdn.microsoft.com/zh-cn/library/vstudio/aa969768.aspx

问题是我现在需要在focused状态下一种背景色,然后pressed按下的时候还要改变一下背景色,这个在xaml里面应该如何处理呢?是不是不能处理?

那可以用代码来设置下的,在键盘按下事件中注销掉获取焦点事件,设置颜色完之后在注册获取焦点事件
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,