关注点:
一、 获取 捕获鼠标按钮的名字 的显示ide
// GotMouseCapture event handler // MouseEventArgs.source is the element that has mouse capture private void ButtonGotMouseCapture(object sender, MouseEventArgs e) { var source = e.Source as Button; if (source != null) { // Update the Label that displays the sample results. lblHasMouseCapture.Content = source.Name; } // Another way to get the element with Mouse Capture // is to use the static Mouse.Captured property. else { // Mouse.Capture returns an IInputElement. IInputElement captureElement; captureElement = Mouse.Captured; // Update the Label that displays the element with mouse capture. lblHasMouseCapture.Content = captureElement.ToString(); } }
二、 点击Capture Mouse按钮时,使RaidoButton指示的鼠标 执行 被鼠标捕获状态。此时鼠标变大??就像鼠标放于按钮上状态。。。答:根据按钮上鼠标捕获定义,意味着捕获鼠标就是默认鼠标在按钮上拖移状态。spa
private void OnCaptureMouseRequest(object sender, RoutedEventArgs e) { Mouse.Capture(_elementToCapture); } private IInputElement _elementToCapture; private void OnRadioButtonSelected(object sender, RoutedEventArgs e) { var source = e.Source as RadioButton; if (source != null) { switch (source.Content.ToString()) { case "1": _elementToCapture = Button1; break; case "2": _elementToCapture = Button2; break; case "3": _elementToCapture = Button3; break; case "4": _elementToCapture = Button4; break; } } }
一、实现效果线程
二、关键词code
三、静态组织
window的命令绑定设置:orm
<!-- Command Binding for the Custom Command --> <Window.CommandBindings> <CommandBinding Command="{x:Static local:MainWindow.CustomCommand}" Executed="CustomCommandExecuted" CanExecute="CustomCommandCanExecute" /> </Window.CommandBindings>
完整滑块状态设置:事件
<Border BorderBrush="DarkBlue" BorderThickness="1" Height="75" Width="425"> <StackPanel Orientation="Horizontal"> <Button Command="Slider.DecreaseSmall" CommandTarget="{Binding ElementName=secondSlider}" Height="25" Width="25" Content="-"/> <Label VerticalAlignment="Center">0</Label> <Slider Name="secondSlider" Minimum="0" Maximum="60" Value="15" TickFrequency="5" Height="50" Width="275" TickPlacement="BottomRight" LargeChange="5" SmallChange="5" AutoToolTipPlacement="BottomRight" AutoToolTipPrecision="0" MouseWheel="OnSliderMouseWheel" MouseUp="OnSliderMouseUp" /> <Label VerticalAlignment="Center">60</Label> <Button Command="Slider.IncreaseSmall" CommandTarget="{Binding ElementName=secondSlider}" Height="25" Width="25" Content="+"/> </StackPanel> </Border>
四、动态流程
设置计时器:显示随时间秒数更新的时间数字ip
// System Timer setup. var timer = new Timer(); timer.Elapsed += timer_Elapsed; timer.Interval = 1000; timer.Enabled = true; // System.Timers.Timer.Elapsed handler // Places the delegate onto the UI Thread's Dispatcher private void timer_Elapsed(object sender, ElapsedEventArgs e) { // Place delegate on the Dispatcher. Dispatcher.Invoke(DispatcherPriority.Normal, new TimerDispatcherDelegate(TimerWorkItem)); } // Method to place onto the UI thread's dispatcher. // Updates the current second display and calls // InvalidateRequerySuggested on the CommandManager to force the // Command to raise the CanExecuteChanged event. private void TimerWorkItem() { // Update current second display. lblSeconds.Content = DateTime.Now.Second; // Forcing the CommandManager to raie the RequerySuggested event. CommandManager.InvalidateRequerySuggested(); }
判断命令可否执行:ci
// CanExecute Event Handler. // // True if the current seconds are greater than the target value that is // set on the Slider, which is defined in the XMAL file. private void CustomCommandCanExecute(object sender, CanExecuteRoutedEventArgs e) { if (secondSlider != null) { e.CanExecute = DateTime.Now.Second > secondSlider.Value; } else { e.CanExecute = false; } }
滑块中轮滚动事件,引发滑块值增减固定值element
private void OnSliderMouseWheel(object sender, MouseWheelEventArgs e) { var source = e.Source as Slider; if (source != null) { if (e.Delta > 0) { // Execute the Slider DecreaseSmall RoutedCommand. // The slider.value propety is passed as the command parameter. Slider.DecreaseSmall.Execute( source.Value, source); } else { // Execute the Slider IncreaseSmall RoutedCommand. // The slider.value propety is passed as the command parameter. Slider.IncreaseSmall.Execute( source.Value, source); } } }
ps:此示例的e.Prameter为空,不显示秒数。路由