WPF PreviewMouse 事件不起作用
WPF PreviewMouse events not working
使用以下代码在附加到进程时出现一些奇怪的行为。每个按钮都有 Mouseup 和 Mousedown。在正常 运行 上,只有 MouseDown 起作用,而 MouseUp 被跳过。如果我在 MouseUp 中放置一个断点,它仍然会被跳过。在 MouseDown 中放置一个断点,然后两个事件都起作用。有什么想法或不同的方法吗?
private void Window_Load(object sender, RoutedEventArgs e)
{
TelescopeHardware.Start();
TelescopeHardware.StaticPropertyChanged += PropertyChanged;
ButtonLeft.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(0.0, -GuideRate); };
ButtonLeft.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewLeft); };
ButtonRight.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(0.0, GuideRate); };
ButtonRight.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewRight); };
ButtonUp.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(GuideRate, 0.0); };
ButtonUp.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewUp); };
ButtonDown.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(-GuideRate, 0.0); };
ButtonDown.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewDown); };
ButtonStop.PreviewMouseLeftButtonDown += (s, ev) => { TelescopeHardware.AbortSlew(); };
SlewSpeed_Load();
Version_Load();
EquatorialSystem_Load();
GetTrackingRates();
}
这是一个按钮的 Xaml...
<Button Grid.Column="0" Grid.Row="1" Margin="2,2,2,2">
<Rectangle x:Name="ButtonLeft" Fill="{StaticResource Arrow-Left-Bold-Circle}" Height="32" Width="32" />
</Button>
如果您将 Button
替换为另一个不处理鼠标点击的元素,例如 Border
:
,您的代码将按预期工作
<Border Grid.Column="0" Grid.Row="1" Margin="2,2,2,2" BorderThickness="1">
<Rectangle x:Name="ButtonLeft" Fill="{StaticResource Arrow-Left-Bold-Circle}" Height="32" Width="32" />
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="#FFDDDDDD"/>
<Setter Property="BorderBrush" Value="#FF707070"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="#FFBEE6FD"/>
<Setter Property="BorderBrush" Value="#FF3C7FB1"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
使用以下代码在附加到进程时出现一些奇怪的行为。每个按钮都有 Mouseup 和 Mousedown。在正常 运行 上,只有 MouseDown 起作用,而 MouseUp 被跳过。如果我在 MouseUp 中放置一个断点,它仍然会被跳过。在 MouseDown 中放置一个断点,然后两个事件都起作用。有什么想法或不同的方法吗?
private void Window_Load(object sender, RoutedEventArgs e)
{
TelescopeHardware.Start();
TelescopeHardware.StaticPropertyChanged += PropertyChanged;
ButtonLeft.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(0.0, -GuideRate); };
ButtonLeft.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewLeft); };
ButtonRight.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(0.0, GuideRate); };
ButtonRight.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewRight); };
ButtonUp.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(GuideRate, 0.0); };
ButtonUp.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewUp); };
ButtonDown.PreviewMouseLeftButtonUp += (s, ev) => { SetPulseGuideParms(-GuideRate, 0.0); };
ButtonDown.PreviewMouseLeftButtonDown += (s, ev) => { StartSlew(SlewDirection.SlewDown); };
ButtonStop.PreviewMouseLeftButtonDown += (s, ev) => { TelescopeHardware.AbortSlew(); };
SlewSpeed_Load();
Version_Load();
EquatorialSystem_Load();
GetTrackingRates();
}
这是一个按钮的 Xaml...
<Button Grid.Column="0" Grid.Row="1" Margin="2,2,2,2">
<Rectangle x:Name="ButtonLeft" Fill="{StaticResource Arrow-Left-Bold-Circle}" Height="32" Width="32" />
</Button>
如果您将 Button
替换为另一个不处理鼠标点击的元素,例如 Border
:
<Border Grid.Column="0" Grid.Row="1" Margin="2,2,2,2" BorderThickness="1">
<Rectangle x:Name="ButtonLeft" Fill="{StaticResource Arrow-Left-Bold-Circle}" Height="32" Width="32" />
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="#FFDDDDDD"/>
<Setter Property="BorderBrush" Value="#FF707070"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="#FFBEE6FD"/>
<Setter Property="BorderBrush" Value="#FF3C7FB1"/>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>