为什么ToggleButton中的命令绑定无法识别触摸屏输入?

问题描述 投票:0回答:1

平台与应用:我在WPF应用程序中使用MVVM模式。部署后的应用程序只能通过触摸屏访问。正如mvvm模式所建议的那样,我对ICommands和附加的RelayCommands使用了Command绑定。

  <ToggleButton Grid.Row="1" 
          Padding="5 4 4 4"
          Command="{Binding HomeCommand}" 
          IsChecked="{Binding isCheckedHomeButton, Mode=TwoWay}"
          Style="{StaticResource SideMenuToggleButton}" 
          Content="{StaticResource FontAwesomeIconHome}"/>

问题:如果在开始时单击或触摸了按钮,则将正确触发并执行RelayCommands。一段时间(通常为2分钟)后,应用程序仍会识别是否已单击按钮,但无法识别是否已触摸按钮。

我到目前为止测试的内容:Windows应用程序EventLog没有相关条目。

尽管有MVVM Command模式,我还是添加了事件处理程序,以确保TouchDown事件正确触发。该应用程序正确响应了所有附加的触摸输入。

PS C:\Temp\DebugLog> Get-Content .\testLog.txt -Wait
MouseClickDetected --- 30.10.2019 13:00:20
MouseClickDetected --- 30.10.2019 13:01:10
MouseClickDetected --- 30.10.2019 13:01:11
MouseClickDetected --- 30.10.2019 13:01:11
MouseClickDetected --- 30.10.2019 13:01:11
TOUCHDOWN Detected --- 30.10.2019 13:11:51
TOUCHDOWN Detected --- 30.10.2019 13:11:51
TOUCHDOWN Detected --- 30.10.2019 13:11:52
TOUCHDOWN Detected --- 30.10.2019 13:11:52
TOUCHDOWN Detected --- 30.10.2019 13:11:52
TOUCHDOWN Detected --- 30.10.2019 13:11:52

因此问题仅在命令绑定中发生。

我怎么弄清楚为什么绑定的命令没有被触摸触发?幸运的是,触摸屏输入一开始就起作用了吗?

c# wpf xaml mvvm touch
1个回答
0
投票

前一段时间,我遇到了类似的问题。我目前无法复制您的问题,但这是一个提示。尝试使用“ PreviewMouseDown”而不是“ IsChechked”,只需添加类似以下内容的事件处理程序即可:

 private void ToggleButton_PreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        if (yourToggleButton.IsChecked == true)
        {
            //uncheck task
            yourToggleButton.IsChecked = false;

        }
        else
        {
            //check task
            yourToggleButton.IsChecked = true;
        }
    }

我知道,这不是最理想的方式,但是ToggleButton有一些问题,我稍后会提供一些更适当的信息(如果您愿意)。 PreviewMouseDown(或Up,无论您喜欢什么)都应该正确处理触摸事件。

© www.soinside.com 2019 - 2024. All rights reserved.