2015-04-07 91 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"); 
    }