Windows タブレット PC 用のアプリケーションを作成しています。SurfaceScrollViewer
を使用して、ウィンドウの右側に垂直方向のスクロール可能なリストをレンダリングするカスタム コントロールを作成しました。コントロールは Adorner を使用して Window の adorner レイヤーに自身を追加し、ウィンドウ コンテンツの上にレンダリングできるようにします。
これは非常にうまく機能しますが、サーフェス スクロール ビューアはマウス ホイールまたはスクロール バーでしかスクロールできません。スクロールバーを非表示にして、ユーザーがタッチでリストをドラッグできるようにしたいのですが、これはうまくいきません。このプロジェクトの他の場所でコントロールを使用しましたがSurfaceScrollViewer
、これはうまくいきました。この問題は、コントロールがどのように構築されたか、またはコントロールが AdornerLayer にあることが原因であると推測しています。Surface にタッチを登録することと関係がありますか? 奇妙なことSurfaceButton
に、リスト内のコントロールは正常に機能します。
ヘルプやアドバイスをいただければ幸いです。これは基本的にカスタム コントロールです。サイズを小さくするためにいくつかのバインディングのビットとピースを削除し、周囲の Window/AdornerLayer/Adorner 要素を追加してコンテキストに入れました。
EDIT - アドナーは、実際には、ウィンドウの子であるグリッドのアドナー レイヤーに追加されます。以下の XAML を更新しました。
<Window x:Name="Main">
<Grid>
<AdornerDecorator>
<!-- Adorner layer added to Window in code-behind -->
<AdornerLayer>
<Adorner>
<!-- Custom Control Starts Here -->
<Grid x:Name="root" Visibility="Collapsed" Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Window}}" Height="{Binding ActualHeight, RelativeSource={RelativeSource AncestorType=Window}}">
<Controls:SurfaceButton x:Name="btnCloser" Opacity="0" Background="White"/>
<Grid x:Name="menu" Width="400" HorizontalAlignment="Right" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="20"/>
<RowDefinition />
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Border Opacity="0.75" BorderThickness="0" Background="Black" Grid.RowSpan="5" />
<TextBlock Text="{TemplateBinding Title}" FontSize="24" Grid.Row="1" Foreground="White" HorizontalAlignment="Center" Margin="10"/>
<Controls:SurfaceScrollViewer Grid.Row="3" Margin="5" Elasticity="0.0, 0.5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<ItemsControl x:Name="items" Background="Transparent" ItemsSource="{TemplateBinding MenuItems}">
<ItemsControl.Style>
<Style>
<Setter Property="ItemsControl.ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemsControl.ItemTemplate">
<Setter.Value>
<DataTemplate>
<Controls:MyButton HorizontalContentAlignment="Center" Margin="3" Content="(Bound Stuff)" Background="(Bound Stuff)"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ItemsControl.Style>
</ItemsControl>
</Controls:SurfaceScrollViewer>
</Grid>
</Grid>
</Adorner>
</AdornerLayer>
</AdornerDecorator>
</Grid>
</Window>