2016-05-13 6 views
0

У меня есть эта очень простая кнопка в WPF, который должен вызвать функцию preview() на MouseDown и функции hide() на MouseUp. Однако он не работает и даже не попадает на его обработчик событий. Какая у меня ошибка?Почему обработчик события MouseDown не попадает?

Я попытался изменить свойство фона, не использовать. MouseLeave и 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

Ручка 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 раскрывают эти события. Все события «Preview ...» - это события «Tunnel», в то время как другие события Mouse являются событиями «Bubble». События туннеля поднимаются сначала на элементах более высокого уровня, например. если вы нажмете над элементом кнопки, первое событие «Просмотр мыши» переходит к окну, а затем вниз по всем его потомкам, пока не достигнет конечной цели, в данном случае кнопки. Затем начинается нормальное, т. Е. Не-предварительное событие «мышки», до тех пор, пока оно не достигнет окна. В любом месте по этой цепочке обработчик событий может отмечать событие как обработанное и останавливать процесс. Здесь событие пузырьков MouseDown обрабатывается вашим текстовым блоком, помещенным внутри кнопки.

0

Некоторые элементы управления обрабатывать входные события внутри компании, вы, как правило, можно использовать версию туннельной событий (Preview*) в этих случаях. См. MSDN.

Смежные вопросы