我们正在为 Windows 平板电脑编写应用程序。我创建了一个自定义控件,它使用 aSurfaceScrollViewer
在窗口右侧呈现一个垂直且可滚动的列表。该控件使用 Adorner 将自身添加到 Window 的装饰层,以便可以在窗口内容的顶部呈现它。
它工作得非常好,但表面滚动查看器只能通过鼠标滚轮或滚动条滚动。我希望能够隐藏滚动条并依靠用户通过触摸拖动列表,但这无法正常工作。我们已经SurfaceScrollViewer
在这个项目的其他地方使用了控件,并且效果很好,所以我猜这个问题取决于控件是如何构建的,或者可能是因为它位于 AdornerLayer 中?与 Surface 注册触摸有关吗?奇怪的是SurfaceButton
列表中的控件工作正常。
任何帮助或建议将不胜感激。这基本上是自定义控件。我已经删除了一些绑定的零碎以减小尺寸,并且我添加了周围的 Window/AdornerLayer/Adorner 元素以将其置于上下文中。
编辑- 装饰器实际上被添加到 Grid 的装饰器层,它是 Window 的子级。我已经更新了下面的 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>