8.0 では実行できません (8.1 の場合は EDIT までスクロールします)。独自の ScrollViewer を実装して GridView テンプレートで使用するか、GridView の上にレイヤーを配置して、前に提案したようにすべての入力呼び出しを中継する必要があります。実際には、ScrollViewer の独自のバージョンを実装することは、おそらくそれほど難しくありません (操作イベントの子項目で Canvas.SetLeft を呼び出す 1 つの子を持つ Canvas コントロール)。
私が持っている新しいアイデアの 1 つは、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