WPF ClickMode Press和ShowDialog以及TouchInput问题

时间:2015-11-25 18:23:40

标签: c# wpf xaml windows-10

我遇到了问题:

在当前窗口中触摸按钮后,另一个窗口将按ShowDialog()打开。 这个新的对话窗口有唯一的按钮。单击处理程序关闭对话框窗口。

当我通过触摸ClickMode = Release(默认模式)按钮打开对话框时,没有问题。 但!当我尝试通过按下ClickMode = Press按钮来执行此操作时,将忽略第一次触摸对话框窗口。 它在win8 - win10中通过触摸再现(不是鼠标点击,鼠标一切正常)。

我想,在Dispatcher.PushFrame内部ShowDialog()存在一些问题,并在触摸输入中虚拟化鼠标事件。

有没有人有任何想法如何使ClickMode=Press按钮与触摸和鼠标输入相同?

我的代码

MainWindow.xaml

<Window x:Class="SimpleTouchCrash.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <Button x:Name="btnPress" ClickMode="Press" Click="BtnPress_OnClick" Height="100">Mode: Press</Button>
         <Button x:Name="btnRelease" Click="BtnPress_OnClick" Height="100">Mode: Release</Button>
    </StackPanel>
</Window>

MainWindow.xaml.cs

using System.Windows;       
namespace SimpleTouchCrash
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void BtnPress_OnClick(object sender, RoutedEventArgs e)
        {
            var dlg= new Dialog();
            dlg.ShowDialog();
        }
    }
}

Dialog.xaml

<Window x:Class="SimpleTouchCrash.Dialog"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Dialog" Height="300" Width="300">
        <Grid>
            <Button x:Name="btnCloseDialog" Click="BtnCloseDialog_OnClick">Close me!</Button>
        </Grid>
    </Window>

Dialog.xaml.cs

using System.Windows;
    namespace SimpleTouchCrash
    {
        public partial class Dialog 
        {
            public Dialog()
            {
                InitializeComponent();
            }
            private void BtnCloseDialog_OnClick(object sender, RoutedEventArgs e)
            {
                Close();
            }
        };
    }

P.S。我知道有一个“黑客”禁用触摸输入: https://connect.microsoft.com/VisualStudio/Feedback/Details/1016534 但是在Windows 10 [11月1511发布]中使用这种“黑客”会导致异常。

System.ArgumentNullException: ???????? ?? ????? ???? ??????????????.
??? ?????????: key
   ? System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
   ? System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
   ? System.Windows.Input.StylusLogic.ProcessInputReport(RawStylusInputReport inputReport)
   ? System.Windows.Input.PenContext.FirePenInRange(Int32 stylusPointerId, Int32[] data, Int32 timestamp)
   ? System.Windows.Input.PenThreadWorker.FireEvent(PenContext penContext, Int32 evt, Int32 stylusPointerId, Int32 cPackets, Int32 cbPacket, IntPtr pPackets)
   ? System.Windows.Input.PenThreadWorker.ThreadProc()
   ? System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   ? System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   ? System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   ? System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   ? System.Threading.ThreadHelper.ThreadStart()

P.P.S。我知道MS Surface SDK https://www.microsoft.com/en-us/download/details.aspx?id=26716 但我无法使用它,因为我的应用程序也应该在Windows XP上运行。

0 个答案:

没有答案