2016-05-13 105 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

相關問題