2015-04-07 89 views
0

在我的WPF应用程序中我有很多由复选框和标签组成的DockPanel。我希望应用程序处理DockPanel的mousedown事件,就好像复选框被点击一样,即用户不必特别点击复选框;他还可以单击标签以选中/取消选中该复选框。 我添加了一个事件处理程序“DockPanel_MouseDown”,它简单地翻转了复选框的IsChecked属性,并且这可以工作。 我的问题是,我有很多这些DockPanels,我不想给每个复选框和每个dockpanel一个名称,并写了数百个基本上做同样事情的eventhandlers。 有没有办法将这种行为放入样式或模板中? C隧道Dockpanel Mousedown事件在WPF中的复选框

回答

2

为什么使用单独的标签检查和取消选中复选框?

Use this Alternative solution

<StackPanel> <CheckBox IsChecked="{Binding IsChecked, ElementName=checkbox}" Content="Hello"> <CheckBox.Template> <ControlTemplate TargetType="CheckBox"> <ContentPresenter/> </ControlTemplate> </CheckBox.Template> </CheckBox> <CheckBox x:Name="checkbox" Content="Normal checkbox"/> </StackPanel>

+0

哈哈。事实上,从来没有发生过一个组合框可能有适当的属性来实现这种行为。感谢一堆! – Curtis

0

你真的没有给它们命名或为每个DockPanel中的事件处理程序。

您可以对所有这些dockpanels使用相同的事件处理程序,并且在您的事件处理程序中可以使用发件人而不是名称。

<StackPanel Orientation="Vertical"> 
     <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp"> 
      <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/> 
      <Label DockPanel.Dock="Right" Content="CheckBox1" /> 
     </DockPanel> 
     <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp"> 
      <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/> 
      <Label DockPanel.Dock="Right" Content="CheckBox1"/> 
     </DockPanel> 
     <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp"> 
      <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/> 
      <Label DockPanel.Dock="Right" Content="CheckBox1"/> 
     </DockPanel> 
     <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp"> 
      <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/> 
      <Label DockPanel.Dock="Right" Content="CheckBox1"/> 
     </DockPanel> 
    </StackPanel> 

代码:

private void DockPanel_OnMouseUp(object sender, MouseButtonEventArgs e) 
    { 
     var dockPanel = (DockPanel) sender; 
     dockPanel.Tag = !dockPanel.Tag.ToString().ToLower().Equals("true"); 
    }