【发布时间】:2016-08-28 18:49:15
【问题描述】:
我正在开发一个 WPF 触摸应用程序。我有一个包含按钮的滚动查看器。我想在触摸拖动按钮时滚动显示,并在点击时调用按钮的命令。下面是一些开始使用的代码:
<Window x:Class="wpf_Button_Scroll.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:wpf_Button_Scroll"
Title="MainWindow" Height="350" Width="200">
<Window.DataContext>
<my:MyViewModel />
</Window.DataContext>
<Grid>
<ScrollViewer>
<ListView ItemsSource="{Binding MyData}" HorizontalAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}"
Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding}"
Margin="5 2" Width="150" Height="50"
FontSize="30" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollViewer>
</Grid>
</Window>
还有视图模型:
namespace wpf_Button_Scroll
{
class MyViewModel
{
public MyViewModel()
{
MyCommand = new ICommandImplementation();
}
public string[] MyData
{
get
{
return new string[]{
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"
};
}
}
public ICommand MyCommand { get; private set; }
private class ICommandImplementation : ICommand
{
public bool CanExecute(object parameter) { return true; }
public event EventHandler CanExecuteChanged;
public void Execute(object parameter) { System.Windows.MessageBox.Show("Button clicked! " + (parameter ?? "").ToString()); }
}
}
}
预期行为:
当用户点击按钮时,会出现一个消息框,其中包含“Button clicked!”文本。 ==> 好的
当用户按下按钮并移动手指(不松开)时,按钮会上下滚动 ==> NOK
如何在包含按钮的 ScrollViewer 中实现滚动?
我正在 Windows 7 上的 Visual Studio 2013 上进行开发,我的目标是具有相同代码库的 Windows 7 桌面和 Windows 8 平板电脑。框架 4.0。如果真的有必要,我可以升级到 4.5.2(我们有很多用户,所以升级并非易事)。
【问题讨论】:
-
您的问题解决了吗? (我实际上希望这在默认情况下会起作用)
-
@H.B.是的,我的问题解决了。请参阅已接受的答案(我刚刚对其进行了编辑,因为它不是很清楚)。
标签: wpf xaml touch scrollviewer