2015-02-09 105 views

回答

3

不太难。

代码隐藏

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Checkbox_OnMouseEnter(object sender, MouseEventArgs e) 
    { 
     var checkbox = sender as CheckBox; 

     if (e.LeftButton == MouseButtonState.Pressed) 
     { 
      if (checkbox != null) 
      { 
       checkbox.IsChecked = !checkbox.IsChecked; 
      } 
     } 
    } 

    private void UIElement_OnGotMouseCapture(object sender, MouseEventArgs e) 
    { 
     if (e.LeftButton == MouseButtonState.Pressed) 
     { 
      var checkbox = sender as CheckBox; 
      if (checkbox != null) 
      { 
       checkbox.IsChecked = !checkbox.IsChecked; 
       checkbox.ReleaseMouseCapture(); 
      } 
     } 
    } 

XAML

<Window x:Class="ClickAndDrag.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<StackPanel> 
    <CheckBox MouseEnter="Checkbox_OnMouseEnter" GotMouseCapture="UIElement_OnGotMouseCapture"/> 
    <CheckBox MouseEnter="Checkbox_OnMouseEnter" GotMouseCapture="UIElement_OnGotMouseCapture"/> 
    <CheckBox MouseEnter="Checkbox_OnMouseEnter" GotMouseCapture="UIElement_OnGotMouseCapture"/> 
    <CheckBox MouseEnter="Checkbox_OnMouseEnter" GotMouseCapture="UIElement_OnGotMouseCapture"/> 
    <CheckBox MouseEnter="Checkbox_OnMouseEnter" GotMouseCapture="UIElement_OnGotMouseCapture"/> 
    <CheckBox MouseEnter="Checkbox_OnMouseEnter" GotMouseCapture="UIElement_OnGotMouseCapture"/> 
</StackPanel> 

原因释放鼠标捕获是为了防止一个复选框吞下所有的事件被点击时。

+0

完美,谢谢! – 2confused4u 2015-02-09 11:46:54