平台与应用:我在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
因此问题仅在命令绑定中发生。
我怎么弄清楚为什么绑定的命令没有被触摸触发?幸运的是,触摸屏输入一开始就起作用了吗?
前一段时间,我遇到了类似的问题。我目前无法复制您的问题,但这是一个提示。尝试使用“ 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,无论您喜欢什么)都应该正确处理触摸事件。