2017-01-18 5 views
1

Я пытаюсь этот код на самом деле я создал только один Eventhandler, который находится на Click="button_Click".Как проверить, находится ли кнопка мыши слева или справа в wpf C#?

XAML:

<Window x:Class="WPFAPP.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WPFAPP" 
    mc:Ignorable="d" 
    Title="Window1" Height="447.625" Width="562"> 

    <Grid> 
     <Button x:Name="btn1" Content="Button1" Click="button_Click" HorizontalAlignment="Left" Margin="26,22,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="btn2" Content="Button2" Click="button_Click" HorizontalAlignment="Left" Margin="26,61,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="btn3" Content="Button3" Click="button_Click" HorizontalAlignment="Left" Margin="26,100,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="btn4" Content="Button4" Click="button_Click" HorizontalAlignment="Left" Margin="26,137,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button x:Name="btn5" Content="Button5" Click="button_Click" HorizontalAlignment="Left" Margin="26,174,0,0" VerticalAlignment="Top" Width="75"/> 
    </Grid> 
</Window> 

Код За C#:

private void button_Click(object sender, RoutedEventArgs e) 
{ 
    Button button = (Button)sender; 
    if(e.Equals(Mouse.RightButton)) 
    { 
     button.ClearValue(Button.BackgroundProperty); 
     button.Background = Brushes.Green; 
    } 
} 
+0

Я думал, что нажатие кнопки всегда должно быть вашей главной кнопкой (вправо или влево в зависимости от вашей установки ПК). – BugFinder

+0

На самом деле сэр моя проблема включена, если инструкция, потому что если я удалю (если инструкция), то мой код работает нормально, но затем он не проверяет насчет щелчка мыши – Shahbaz

+0

Я НЕ мужчина ... то какие значения вы получаете в e (который изначально был моим вопросом), потому что я очень уверен, что e - это не просто mousebutton – BugFinder

ответ

6

Нажмите предназначен только для наиболее ограниченного взаимодействия, если вы используете более сложные события мыши вы потом получите MouseButtonEventArgs, который дает вам все подробности о мероприятии.

причина этого заключается в том, что Нажмите не событие мыши, вы можете также запустить его с помощью сенсорного управления, стилус, вы можете даже вызвать его с помощью клавиатуры, нажав Return в то время как подчеркнул

поэтому попробуйте MouseDown, MouseUp или DoubleClick вместо

например

<Button MouseDoubleClick="Button_MouseDoubleClick" >Click me</Button> 
private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    if(e.ChangedButton == MouseButton.Right) 
    { 
    } 
    e.Handled = true; 
} 

или мыши вниз

<Button MouseDown="Button_MouseDown" >Click me</Button> 
private void Button_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if(e.ChangedButton == MouseButton.Right) 
    { 
    } 
    e.Handled = true; 
} 
+0

Эта ошибка заключается в попытке вызвать событие за пределами владельца события – MikeT

+0

@Shahbaz Я поставил, как назвать событие в примере – MikeT

+0

Для левой и правой кнопок MouseLeftbuttondown и MouseRightbuttondown есть два отдельных события. – Rudra

0

Это всегда лучше иметь отдельный обработчик событий для левой и правой кнопки мыши вниз. Если вам нужно работать по нажатой кнопке. Ниже мой подход.

<Button MouseLeftButtonDown="Button_MouseLeftButtonDown" MouseRightButtonDown="Button_MouseRightButtonDown"></Button> 

Ниже приведен код.

private void Button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 

} 

private void Button_MouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 

} 

Если вы хотите, чтобы получить кнопку, которая вызывает событие, вы можете проверить e.OriginalSource собственности.

+0

Я бы не согласился с тем, что всегда лучше, так как всегда лучше делать что-то один раз, а не несколько раз, возможно, что вам нужна другая белизна для левого, правого среднего, специального1, специального2 или любой комбинации с несколькими кнопками, с помощью простой MouseDown все из них, где слева и справа не было – MikeT

+0

Итак, собираемся ли поддерживать уровень сетки MouseDown Event для всех кнопок? – Rudra

+0

Зависит, если это требуется, обычно вы просто хотите активировать кнопку, поэтому способ активации не имеет значения, и в этом случае я бы просто привязал команду, но если мне нужно иметь несколько способов активации одного и того же элемента управления, я всегда стану цели для единственной точки входа – MikeT

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