首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xaml: MouseLeftButtonUp事件不工作

Xaml: MouseLeftButtonUp事件不工作
EN

Stack Overflow用户
提问于 2014-02-27 13:23:08
回答 1查看 2.7K关注 0票数 2

我有一个声明为ControlTemplate App.xaml的Button的xaml代码

代码语言:javascript
复制
 <!--Style for button start here-->
  <Style  x:Key="myButtonStyle" TargetType="Border">
  <EventSetter Event="Border.MouseLeftButtonDown" Handler="ButtonDown" />
    <EventSetter Event="Border.MouseLeftButtonUp" Handler="ButtonUp" />
    <EventSetter Event="Border.MouseEnter" Handler="ButtonEnter" />
    <EventSetter Event="Border.MouseLeave" Handler="ButtonLeave"/>

</Style>

<!--Style for myButtonStyle ends here-->

<!--Control Template for button start here-->
<ControlTemplate TargetType="Button" x:Key="buttonPrimary">
    <Grid Width="{TemplateBinding Width}">
        <Border Height="35" Width="{TemplateBinding Width}" Style="{StaticResource myButtonStyle}"  Background="{TemplateBinding Background}" CornerRadius="3" Loaded="borderLoaded"  x:Name="myButton">
                <ContentPresenter  HorizontalAlignment="Center"  VerticalAlignment="Center" >
                    <TextBlock.Foreground>
                        White
                    </TextBlock.Foreground>
                    <TextBlock.FontSize>14</TextBlock.FontSize>

                </ContentPresenter>
        </Border>
    </Grid>

</ControlTemplate> 

在另一个文件中,我处理了所有的鼠标事件。Main.cs

代码语言:javascript
复制
 private void ButtonDown(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("ButtonDown");

   }//Button Down method ends here


   private void ButtonUp(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("Button Up");

   }//ButtonUp method ends here


   private void ButtonLeave(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("ButtonLeave");
   }


   private void ButtonEnter(object sender, RoutedEventArgs e)
   {
       Console.WriteLine("ButtonEnter");
   }

在main.xaml我叫这个按钮..。Main.xaml

代码语言:javascript
复制
 <Button   Content="ButtonPrimary" Width="110" Background="#428bca" Template="{StaticResource buttonPrimary}"  />

除了MouseLeftButtonUp之外,所有的事件都在进行。?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 14:20:05

按钮的单击事件会吃掉MouseUp事件。

所以:

代码语言:javascript
复制
    <Style x:Key="buttonPrimary" TargetType="Button">
        <EventSetter Event="Click" Handler="ButtonBase_OnClick"/>
        <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ButtonDown" />
        <EventSetter Event="PreviewMouseLeftButtonUp" Handler="ButtonUp" />
        <EventSetter Event="MouseEnter" Handler="ButtonEnter" />
        <EventSetter Event="MouseLeave" Handler="ButtonLeave"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid Width="{TemplateBinding Width}">
                        <Border Height="35" Width="{TemplateBinding Width}" Background="{TemplateBinding Background}" CornerRadius="3"   x:Name="myButton">
                        <ContentPresenter  HorizontalAlignment="Center"  VerticalAlignment="Center" >
                            <TextBlock.Foreground>
                                White
                            </TextBlock.Foreground>
                            <TextBlock.FontSize>14</TextBlock.FontSize>

                        </ContentPresenter>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>          
    </Style>

然后添加只处理单击事件的ButtonBase_OnClick事件:

代码语言:javascript
复制
private void ButtonBase_OnClick(object sender, RoutedEventArgs e){
    e.Handled = true;
}

并将按钮从Template=更改为Style=,然后将得到所有事件。

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

https://stackoverflow.com/questions/22069868

复制
相关文章

相似问题

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