私たちはWindowsタブレットPC用のアプリケーションを作成しています。 SurfaceScrollViewer
を使用して、ウィンドウの右側に垂直およびスクロール可能なリストをレンダリングするカスタムコントロールを作成しました。コントロールはAdornerを使用してウィンドウのアドナーレイヤーに自身を追加し、ウィンドウコンテンツの上部にレンダリングすることができます。SurfaceScrollViewerがドラッグスクロールしないのはなぜですか?
これはとてもうまく動作しますが、サーフェススクロールビューアはマウスホイールまたはスクロールバーを介してのみスクロールします。私はスクロールバーを隠すことができ、ユーザーがタッチでリストをドラッグすることに頼ることができますが、これは動作を拒否します。私たちはこのプロジェクトのSurfaceScrollViewer
コントロールをこのプロジェクトのどこかで使用しましたが、これはうまくいきました。この問題は、コントロールがどのように構築されているか、あるいはAdornerLayerにあるからでしょうか? Surfaceとの接触登録には何か?奇妙なことは、リスト内のSurfaceButton
コントロールが正常に機能していることです。
ご迷惑をおかけして申し訳ございません。これは基本的にカスタムコントロールです。私はサイズを減らすためにいくつかの束縛ビットと部分を削除しました。そして、周囲のWindow/AdornerLayer/Adorner要素を追加してコンテキストに入れました。
EDIT - adornerは実際には、ウィンドウの子であるグリッドのアドナーレイヤーに追加されます。私は以下の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>
今のところ、この問題を回避するために、スクロールバーをSurfaceScrollViewerに追加する必要がありました。これは、タブレットユーザーが少なくともそのリストをスクロールするために使用できることを意味します。奇妙なことは、スクロールバーを使用すると、コンテンツが再ロードされるまでロックされて動作を停止することがあることです。これはAdornerLayerと関係がありますか? –