它不能用 8.0 完成(对于 8.1 滚动到 EDIT)。您将需要实现自己的 ScrollViewer 以在 GridView 模板中使用,或者在 GridView 上放置一个图层并按照我之前的建议中继所有输入调用。实际上,也许实现您自己的 ScrollViewer 版本并不难(一个带有一个子项的 Canvas 控件,它在操作事件的子项上调用 Canvas.SetLeft)。
我有一个可能对您有用的新想法是在您的 DirectX 控件前面放置另一个 ScrollViewer 并使用它的 ViewChanged 事件,就像您使用操作事件一样 - 检查这个:
XAML
<Page
x:Class="App84.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App84"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid
Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<GridView>
<Grid
Width="300"
Height="300">
<Rectangle
x:Name="DirectXControlPlaceholder"
Width="300"
Height="300"
Fill="Yellow" />
<ScrollViewer
x:Name="ManipulationCaptureScrollViewer"
Style="{StaticResource VerticalScrollViewerStyle}"
VerticalScrollBarVisibility="Hidden"
ViewChanged="ScrollViewer_OnViewChanged">
<Rectangle
Width="200"
Height="10000"
Fill="Transparent"/>
</ScrollViewer>
<TextBlock
x:Name="OffsetTextBlock"
Foreground="Black"
FontSize="24"
VerticalAlignment="Center"
HorizontalAlignment="Center"
/>
</Grid>
<Rectangle
Width="300"
Height="300"
Fill="GreenYellow" />
<Rectangle
Width="300"
Height="300"
Fill="LimeGreen" />
<Rectangle
Width="300"
Height="300"
Fill="Red" />
<Rectangle
Width="300"
Height="300"
Fill="OrangeRed" />
<Rectangle
Width="300"
Height="300"
Fill="DarkOrange" />
<Rectangle
Width="300"
Height="300"
Fill="Orange" />
</GridView>
</Grid>
</Page>
背后的代码
using Windows.UI.Xaml.Controls;
namespace App84
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void ScrollViewer_OnViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
OffsetTextBlock.Text =
ManipulationCaptureScrollViewer.VerticalOffset.ToString();
}
}
}
编辑*
此外,在 Windows 8.1 中,您可以获得ManipulationModes.System
与其他模式(但不支持缩放和旋转)相结合的方式,应该允许您在ScrollViewer
. CancelDirectManipulations()
然后,一旦您希望其父级ScrollViewers
停止处理平移和缩放操作,您就可以调用被操作元素。