回答
这里有一种方法..只要设置你的Window.WindowStyle为 “无”,创造你的下窗口边界:
<Grid>
<Border
BorderBrush="Silver"
BorderThickness="10"
Name="border1"
MouseLeftButtonDown="border1_MouseLeftButtonDown" />
</Grid>
在后面的代码:
private void border1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
MessageBox.Show("Double Click");
}
谢谢!但我正在谈论本地窗口边界...并且您建议使用WPF边框控制... – Terminador 2012-02-09 15:05:24
我建议一种攻击方式是绘制自己的边框,然后您将完全控制事件。 – RQDQ 2012-02-09 15:13:40
Ahhh然后是的,这可能是一个解决方案。谢谢! – Terminador 2012-02-09 15:45:48
using System.Windows.Input;
using System.Windows.Threading;
namespace System.Windows.Controls{
class DCCanvas : Canvas{
public event MouseButtonEventHandler MouseDoubleClick;
private bool doubleClickStarted;
private DispatcherTimer doubleClickTimer;
private const long DOUBLE_CLICK_INTERVAL = 2000000;
public DCCanvas() : base(){
doubleClickStarted = false;
doubleClickTimer = new DispatcherTimer();
doubleClickTimer.Interval = new TimeSpan(DOUBLE_CLICK_INTERVAL);
doubleClickTimer.Tick += new EventHandler(doubleClickTimer_Tick);
MouseUp += new MouseButtonEventHandler(mouseUpReaction);
}
private void mouseUpReaction(object sender, MouseButtonEventArgs e){
if(doubleClickStarted) {
doubleClickStarted =false;
if(MouseDoubleClick!=null)
MouseDoubleClick(sender, e);
}
else{
doubleClickStarted =true;
doubleClickTimer.Start();
}
}
private void doubleClickTimer_Tick(object sender, EventArgs e){
doubleClickStarted = false; doubleClickTimer.Stop();
}
}
}
这里以上是我的Canvas类。您可以使用它来简化处理画布上的双击。它将在指定的时间间隔内每隔一秒钟触发一次(代码中为const DOUBLE_CLICK_INTERVAL)。 在我看来,不是很难使用:
public partial class MainWindow : Window
{
DCCanvas rusCanvas1;
public MainWindow(){
InitializeComponent();
rusCanvas1 = new DCCanvas();
/* Some code with properties for new rusCanvas */
this.grid1.Children.Add(rusCanvas1);
rusCanvas1.MouseDoubleClick += new MouseButtonEventHandler(canvas1_doubleClick);
}
private void canvas1_doubleClick(object sender, MouseButtonEventArgs e) {
MessageBox.Show(sender.ToString());
}
}
如果你不想写属性的画布,你可以在构造函数copyer添加到类:
public DCCanvas(Canvas source) : base(){
Margin = source.Margin;
Style = source.Style;
Height = source.Height;
Width = source.Width;
Background = source.Background;
VerticalAlignment = source.VerticalAlignment;
HorizontalAlignment = source.HorizontalAlignment;
doubleClickStarted = false;
doubleClickTimer = new DispatcherTimer();
doubleClickTimer.Interval = new TimeSpan(DOUBLE_CLICK_INTERVAL);
doubleClickTimer.Tick += new EventHandler(doubleClickTimer_Tick);
MouseUp += new MouseButtonEventHandler(mouseUpReaction);
}
OKY,现在,您可以创建你的可视化编辑器的画布,然后像这样写:
rusCanvas1 = new DCCanvas(c1);
// "c1" is a name of your pre-created standard Canvas.
this.grid1.Children.Add(rusCanvas1);
this.grid1.Children.Remove(c1);
只需复制并删除旧的。
我写了这个类,因为我希望此功能可以作为标准使用。我的意思是,帆布(和所有其他控件和对象!)必须能够处理双击它,而无需额外的编码...
对不起,迟到派对,但我想建议你'第一个答案(由Jaster)改为Why doesnt WPF border control have a mousedoubleclick event?。
它更简洁,甚至不使用单一代码行,因此它完全符合MVVM标准,应该是您的方法。
<Window x:Class="Yoda.Frontend.MainView" x:Name="MainViewWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border>
<Border.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick"
Command="{Binding YourBindableCommand}"
CommandParameter="{Binding}" />
</Border.InputBindings>
</Border>
</Window>
注:当然,你必须使用相应的命令,可能是您的视图模型提供更换YourBindableCommand
。如果您需要帮助,请告诉我。
任何人投票拒绝我的改进答案:请提供什么(仍)没有足够增强的反馈或删除-1。其他一切都没用,因为它不会帮助任何人。 – Yoda 2016-10-28 12:37:41
- 1. Winform和WPF窗体/窗口边框
- 2. WPF:双击路径事件
- 3. 响应双击传输时关闭一个WPF窗口双击主窗口
- 4. 双边框与WPF
- 5. WPF无边框窗口的问题:
- 6. WPF中的无边框窗口
- 7. 双击窗体事件VB.NET
- 8. 禁用最大化双击标题上的WPF窗口
- 9. WPF无边框窗口内利润
- 10. WPF无边框窗口按钮
- 11. WPF窗口边框行事奇怪与功能区控制
- 12. CustomUserControl双击WPF中ControlTemplate中的事件
- 13. (双击)WPF中的触摸事件?
- 14. WPF的ListView ScrollViewer中双击事件
- 15. 在WPF设计器的窗口上方出现白色边框
- 16. wpf窗口边界之外的光标移动事件
- 17. WPF Datagrid双击RowDetailsTemplate也会触发父行上的双击事件
- 18. 触发事件从另一个WPF窗口WPF窗口
- 19. 图片框,双击和单击事件
- 20. TreeView,Overiding双击鼠标事件WPF
- 21. WPF窗口边界问题
- 22. 的MouseDown事件停止射击在WPF窗口
- 23. WPF文本框和双击
- 24. 手柄主窗口的事件 - WPF
- 25. ResourceDictionary中的WPF事件窗口模板
- 26. 两个窗口之间的wpf事件
- 27. 窗口显示WPF中的事件?
- 28. 窗户上双击
- 29. 双击事件
- 30. 双击事件
也许这会帮助 - http://stackoverflow.com/questions/3410768/why-doesnt-wpf-border-control-have-a-mousedoubleclick-event – 2012-02-09 14:52:32
@BaliC对不起,我不明白我可以如何为简单的WPF窗口做? – Terminador 2012-02-09 14:55:59
你的意思是双击窗口镶边?导致窗口最大化/最小化的相同双击? – ppiotrowicz 2012-02-09 14:58:11