[英]WPF with touchscreen, listbox opens a modal window doesn't respond
我有幾個星期/幾個月我面臨一個問題,我希望有人可以幫助我;)這個WPF問題只有在通過觸摸屏使用時才會出現,它可以正常使用鼠標。 重現的概念非常簡單: - 1個帶有列表框或列表視圖的窗口 - 用簡單項目填充列表(例如只有文本) - 帶有2個或更多簡單按鈕的第二個窗口
當您通過觸摸屏在窗口1的列表中選擇項目時,它將以模態模式(ShowDialog)打開第二個窗口。 當第二個窗口打開時,您無法在第一次觸摸時觸摸任何按鈕! 如果你用鼠標做同樣的事情它工作正常! 當你調用窗口2 ShowDialog時,看起來觸摸事件沒有完成(當它不是模態時它工作正常:使用Show)。
這里是XAML窗口1:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="500" Width="661" WindowStartupLocation="CenterScreen">
<StackPanel>
<ListView x:Name="lstItems" Height="300" Margin="10,10,20,10" Width="Auto" ItemsSource="{Binding}" BorderBrush="{x:Null}"
SelectionMode="Single" Visibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Hidden">
</ListView>
</StackPanel>
</Window>
這里是窗口1背后的代碼:
Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
With lstItems
.Items.Clear()
For i = 0 To 50
.Items.Add("test #" & i.ToString)
Next
End With
End Sub
Private Sub lstItems_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles lstItems.SelectionChanged
Dim _frm As frm2 = New frm2
_frm.ClickedItem = lstItems.SelectedItem.ToString
_frm.ShowDialog()
_frm.Close()
_frm = Nothing
End Sub
End Class
窗口2 xaml:
<Window x:Class="frm2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="frm2" Height="393" Width="661" WindowStartupLocation="CenterScreen">
<Grid>
<UniformGrid Columns="2">
<Button x:Name="cmdbutton1" Height="128" Content="Button1"/>
<Button x:Name="cmdbutton2" Height="128" Content="Button2"/>
</UniformGrid>
</Grid>
</Window>
這里是窗口2背后的代碼:
Public Class frm2
Property ClickedItem As String = ""
Private Sub frm2_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
Me.Title = ClickedItem
End Sub
Private Sub cmdbutton1_Click(sender As Object, e As RoutedEventArgs) Handles cmdbutton1.Click
Me.Close()
End Sub
Private Sub cmdbutton2_Click(sender As Object, e As RoutedEventArgs) Handles cmdbutton2.Click
Me.Close()
End Sub
End Class
預先感謝您的幫助...
解決方案就在這里,您只需在Async中聲明您的sub並執行任務等待...
Private Async Sub lstItems_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles lstItems.SelectionChanged
Await Task.Delay(1)
Dim _frm As frm2 = New frm2
_frm.ClickedItem = lstItems.SelectedItem.ToString
_frm.ShowDialog()
_frm.Close()
_frm = Nothing
這個問題在Microsoft KB中被引用,它已經被標記為自.NET 4.5.1以來已經解決,無論如何它不是因為我可以輕松地重現它...我剛剛在這里找到了一個解決方法:
只需替換原始代碼:
Private Sub lstItems_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles lstItems.SelectionChanged
Dim _frm As frm2 = New frm2
_frm.ClickedItem = lstItems.SelectedItem.ToString
_frm.ShowDialog()
_frm.Close()
_frm = Nothing
End Sub
有了這個:
Private Sub lstItems_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles lstItems.SelectionChanged
Dispatcher.BeginInvoke(Sub()
Dim _frm As frm2 = New frm2
_frm.ClickedItem = lstItems.SelectedItem.ToString
_frm.ShowDialog()
_frm.Close()
_frm = Nothing
End Sub)End If End Sub
Dispatcher.BeginInvoke
ShowDialog
為我工作。 它有點慢,但至少工作。 如果你從TouchUp
事件中打開對話框,它也是一樣的,但如果你從按鈕的Click
事件打開,那就很好了。 奇怪的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.