Wir schreiben eine Anwendung für Windows-Tablet-PCs. Ich habe ein benutzerdefiniertes Steuerelement erstellt, das eine SurfaceScrollViewer
verwendet, um eine vertikale und bildlauffähige Liste auf der rechten Seite des Fensters zu rendern. Das Steuerelement verwendet einen Adorner, um sich selbst dem Adorner-Layer des Fensters hinzuzufügen, sodass es über den oberen Rand des Fensterinhalts gerendert werden kann.Warum ist mein SurfaceScrollViewer nicht durch Ziehen scrollbar?
Es funktioniert wirklich gut, aber die Surface Scroll Viewer wird nur durch das Mausrad oder durch die Bildlaufleiste scrollen. Ich möchte die Bildlaufleiste ausblenden und sich darauf verlassen können, dass der Benutzer die Liste per Berührung zieht, aber das funktioniert nicht. Wir haben die SurfaceScrollViewer
Kontrolle an anderer Stelle in diesem Projekt verwendet und das hat gut funktioniert, also vermute ich, dass dieses Problem entweder auf die Art und Weise zurückzuführen ist, wie das Steuerelement erstellt wurde, oder vielleicht, weil es in einem AdornerLayer ist? Etwas mit dem Registrieren der Berührung mit Surface zu tun? Das Seltsame ist, dass die SurfaceButton
Steuerelemente in der Liste funktionieren.
Jede Hilfe oder Beratung würde am meisten geschätzt werden. Dies ist im Grunde die benutzerdefinierte Steuerung. Ich habe ein paar Binding Bits und Stücke entfernt, um die Größe zu reduzieren, und ich habe die umgebenden Window/AdornerLayer/Adorner Elemente hinzugefügt, um es in den Kontext zu setzen.
BEARBEITEN - Der Adorner wird der Adorner-Ebene eines Gitters hinzugefügt, das ein Kind des Fensters ist. Ich habe den XAML unten aktualisiert.
<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>
Jetzt musste ich dem SurfaceScrollViewer eine Bildlaufleiste hinzufügen, um dieses Problem zu umgehen. Dies bedeutet, dass Tablet-Benutzer zumindest das zum Scrollen der Liste verwenden können. Die seltsame Sache ist, dass wenn Sie die Bildlaufleiste verwenden, wird es manchmal blockieren und aufhören zu arbeiten, bis der Inhalt neu geladen wird. Hat das etwas mit der AdornerLayer zu tun? –