簡體   English   中英

雙擊WPF窗口邊框上的事件

[英]Double-click event on WPF Window border

WPF窗口邊框上的雙擊事件是否會觸發任何事件?

我怎么能抓到它?

謝謝!

這是一種方法..只需將Window.WindowStyle設置為“None”並創建下窗口邊框:

<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");
}

很抱歉遲到了,但我想建議你最好的第一個答案(由Jaster) 為什么WPF邊境控制沒有moused雙擊事件?

它更清潔,甚至不使用一行代碼,因此它完全符合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提供的相應命令替換YourBindableCommand 如果您需要幫助,請告訴我。

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類。 您可以使用它來簡化處理“畫布”上的雙擊。 它將在指定的時間間隔內每隔一個mouseUp觸發一次(代碼中為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());
    }
}

如果您不想為Canvas編寫屬性,可以在類中添加構造函數 - 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);

只需復制它並刪除舊的。

我寫了這門課,因為我希望這個功能可以作為標准版提供。 我的意思是,Canvas(以及所有其他控件和對象!)必須能夠在沒有額外編碼的情況下對其進行雙擊...

Window,UserControl和它似乎很多/所有基於控件的元素現在都支持MouseDoubleClick事件。 我正在使用VS2017並建立.net 4.7.1,但可能比它更老了。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.control.mousedoubleclick?view=netframework-4.7.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM