我有一個應用程序可以將鼠標事件轉換爲觸摸事件,以便我可以使用慣性滾動和其他觸摸功能。這代碼是在這裏所選擇的答案:防止滾動列表框時的選擇
WPF: Is there a possibility to "route" ordinary mouse events to touch events in Windows 7
我和我的ListBox
遇到的問題是,而我輕彈滾動,它選擇的項目。通常,觸摸設備在滾動時不會選擇ListBox
項目。我在這裏錯過了什麼?
這裏是我使用的XAML:
<Window x:Class="ScrollingTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="600" Width="525">
<Grid>
<ListBox x:Name="testListBox"
VirtualizingPanel.ScrollUnit="Pixel"
SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<Border CornerRadius="3" Height="60" Width="480" Background="LightGray" Margin="1">
<Label Content="{Binding}"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
後面的代碼:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MouseTouchDevice.RegisterEvents(this);
for (int i = 0; i < 300; i++)
{
testListBox.Items.Add("test " + i.ToString());
}
}
}
我認爲這是一個聰明的解決方案,但是它有一些問題。第一種情況是,如果項目模板包含按鈕,將容器樣式設置爲不可聚焦,則仍然允許點擊按鈕和命令。另一個問題是它不是很可重用,我有大約35個視圖模型需要實現這種行爲MVVM風格,這確實工作正常。 – Robert
我已經更新了'ItemTemplates'上的答案,在這種情況下,我們將'IsHitTestVisible'設置爲false而不是'Focusable',現在我們只需要找到一個很好的方法來通知'IsScrolling',我會有一個遊戲並嘗試找到一個通用的方法來做到這一點。 –
我用一個很好的例子更新了我的答案,它可能不是最迷人的解決方案,但我認爲它適用於您的情況(爲我的工作:)) –