i am new using WPF. I have a WPF Window with a datagrid wich launch a process when double click occurs. This work great, but when i do this in a tablet(with windows 7), using the touch screen, the process never happen. So i need to emulate the double click event with touch events. Any one can help me to do this, please?
質問する
2129 次
2 に答える
0
C# でマウス クリックをシミュレートする方法を参照してください。マウス クリックをエミュレートする方法については (windows-forms で)、次のようにして WPF で動作します。
using System.Runtime.InteropServices;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
public void DoMouseClick()
{
//Call the imported function with the cursor's current position
int X = //however you get the touch coordinates;
int Y = //however you get the touch coordinates;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
}
}
于 2012-07-11T23:06:12.253 に答える
0
まず、マウス イベント クリック関数を追加します。
/// <summary>
/// Returns mouse click.
/// </summary>
/// <returns>mouseeEvent</returns>
public static MouseButtonEventArgs MouseClickEvent()
{
MouseDevice md = InputManager.Current.PrimaryMouseDevice;
MouseButtonEventArgs mouseEvent = new MouseButtonEventArgs(md, 0, MouseButton.Left);
return mouseEvent;
}
WPF コントロールの 1 つにクリック イベントを追加します。
private void btnDoSomeThing_Click(object sender, RoutedEventArgs e)
{
// Do something
}
最後に、任意の関数からクリック イベントを呼び出します。
btnDoSomeThing_Click(new object(), MouseClickEvent());
ダブルクリックをシミュレートするには、PreviewMouseDoubleClick などのダブルクリック イベントを追加し、コードが別の関数で開始されるようにします。
private void lvFiles_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DoMouseDoubleClick(e);
}
private void DoMouseDoubleClick(RoutedEventArgs e)
{
// Add your logic here
}
ダブルクリック イベントを呼び出すには、別の関数 (KeyDown など) から呼び出すだけです。
private void someControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
DoMouseDoubleClick(e);
}
于 2014-04-24T14:05:37.287 に答える