在我的WPF应用程序中我有很多由复选框和标签组成的DockPanel。我希望应用程序处理DockPanel的mousedown事件,就好像复选框被点击一样,即用户不必特别点击复选框;他还可以单击标签以选中/取消选中该复选框。 我添加了一个事件处理程序“DockPanel_MouseDown”,它简单地翻转了复选框的IsChecked属性,并且这可以工作。 我的问题是,我有很多这些DockPanels,我不想给每个复选框和每个dockpanel一个名称,并写了数百个基本上做同样事情的eventhandlers。 有没有办法将这种行为放入样式或模板中? C隧道Dockpanel Mousedown事件在WPF中的复选框
0
A
回答
2
为什么使用单独的标签检查和取消选中复选框?
<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
你真的没有给它们命名或为每个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");
}
相关问题
- 1. mousedown事件不触发在C#中的dockpanel套件#
- 2. 防止WPF事件隧道效应
- 3. WPF按钮隧道OnClick事件
- 4. WPF,Image MouseDown事件
- 5. WPF - 家长如何知道子控件复选框的“选中”事件?
- 6. 隧道事件和ContextMenu
- 7. 矩形的MouseDown抛父帆布MouseDown事件在WPF
- 8. 从复选框未选中事件的WPF返回值
- 9. FrameworkElement对象上的WPF MouseDown事件
- 10. 复选框在WPF
- 11. WPF复选框切换器isChecked在不同的事件
- 12. Mousedown事件发射两次(WPF)
- 13. 吃MouseDown事件关闭WPF菜单后
- 14. 已选中复选框WPF
- 15. 什么是使用隧道CommandBinding.previewcanexecute事件?
- 16. 复选框的onkeyup事件
- 17. 的onclick复选框事件
- 18. 在dockpanel控件中填写文本框/ w stackpanel - WPF
- 19. 复选框上的火灾事件.change()*在复选框出现后被选中。
- 20. NSButton Mousedown事件
- 21. SSH隧道复杂问题
- 22. Angular2复选框 - 取消选中事件
- 23. WPF DockPanel - 订单控件
- 24. 在ExtJS中取消选中复选框时的事件?
- 25. WPF - DockPanel问题
- 26. 复选框WPF MVVM
- 27. DataGridView复选框事件
- 28. 的MouseDown事件停止射击在WPF窗口
- 29. 网格中的MVC复选框事件
- 30. 事件中的JTable头复选框
哈哈。事实上,从来没有发生过一个组合框可能有适当的属性来实现这种行为。感谢一堆! – Curtis