2016-05-13 54 views
0

我有一个非常简单的WPF按钮,应该调用MouseDown上的函数preview(),并且函数hide()上的MouseUp。然而它不起作用,并且甚至没有击中其事件处理程序。我的错误是什么?为什么MouseDown事件处理程序没有被击中?

我试着改变背景属性,没用。 MouseLeave and MouseClick这两个工作,但这不是我想要的。

XAML:

<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" MouseDown="previewButton_MouseDown" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" > 
    <StackPanel Height="98" Width="49"> 
     <Image Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" /> 
     <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/> 
    </StackPanel> 
</Button> 

代码隐藏

private void previewButton_TouchDown(object sender, TouchEventArgs e) 
{ 
    ShowPreviewImage(); 
} 

private void previewButton_TouchUp(object sender, TouchEventArgs e) 
{ 
    HidePreviewImage(); 
} 

private void previewButton_TouchLeave(object sender, TouchEventArgs e) 
{ 
    HidePreviewImage(); 
} 

private void previewButton_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    ShowPreviewImage(); 
} 

private void previewButton_Click(object sender, RoutedEventArgs e) 
{ 
    ShowPreviewImage(); 
} 

private void previewButton_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    HidePreviewImage(); 
} 

private void previewButton_MouseLeave(object sender, MouseEventArgs e) 
{ 
    HidePreviewImage(); 
} 
+0

您是否碰巧尝试过PreviewMouseDown事件? – Bobby

+0

@bob不,我没有。那是什么? –

回答

2

Handle PreviewMouseDown而不是MouseDown事件,PreviewMouseUp而不是MouseUp等等。它应该适合你。

<Button x:Name="previewButton" Background="#FF383434" Margin="5,5,8,0" PreviewMouseDown="previewButton_MouseDown" MouseDown="previewButton_MouseDown" PreviewMouseUp="" MouseUp="previewButton_MouseUp" MouseLeave="previewButton_MouseLeave" TouchDown="previewButton_TouchDown" TouchUp="previewButton_TouchUp" TouchLeave="previewButton_TouchLeave" Grid.Row="1" Click="previewButton_Click" Padding="0" > 
      <StackPanel Height="98" Width="49"> 
       <Image x:Name="Image1" Source="/EZ3D;component/Resources/old/eye.png" Margin="0,17,0,0" /> 
       <TextBlock Text="Preview" TextWrapping="WrapWithOverflow" Margin="0" HorizontalAlignment="Center" Padding="0" FontSize="13" VerticalAlignment="Center"/> 
      </StackPanel> 
     </Button> 

所有FrameworkElements公开这些事件。所有'预览...'事件都是'隧道'事件,而其他鼠标事件是'泡泡'事件。隧道事件首先在较高级别的元素上被提出,例如,如果将鼠标悬停在某个按钮元素上,则第一个预览鼠标事件将转到窗口,然后向下通过其所有后代,直至达到最终目标,在此情况下为按钮。然后正常的,即非预览的鼠标事件开始从那里冒泡直到它到达窗口。沿着这条链的任何地方,事件处理程序都可以将事件标记为已处理并停止处理。这里的MouseDown冒泡事件可以通过放置在按钮中的文本块来处理。

0

某些控件处理输入事件的内部,你通常可以用在那些情况下,事件的隧道版本(Preview*)。请参阅MSDN

相关问题