Laden...

Scrollen, wenn mehrere DataTable-Elemente im Scrollviewer sind

Erstellt von Create vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.215 Views
C
Create Themenstarter:in
21 Beiträge seit 2013
vor 9 Jahren
Scrollen, wenn mehrere DataTable-Elemente im Scrollviewer sind

Hallo,

ich möchte in einem UserControl mehrere Tabellen untereinander anzeigen. Da die Tabellen manchmal größer als das Fenster sind habe ich die in einem Scrollviewer eingebunden.
Soweit funktioniert auch alles, bis auf das Scrollen mit dem Mausrad bzw. das die Pfeiltasten mit der Tastatur.

Hier ist mein Code.


<UserControl x:Class="Test"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="400">
    <StackPanel>
        <ScrollViewer CanContentScroll="True" MouseWheel="UIElement_OnMouseWheel">
            <StackPanel x:Name="ResultStackPanel" MouseWheel="ResultStackPanel_OnMouseWheel">
                <TextBlock Text="Result" Style="{StaticResource Heading}" />
                <Grid Height="auto">
                    <Label Content="Information about result" Margin="0,15,10,0"/>
                    <DataGrid x:Name="ResultInfo" Height="auto"  ColumnWidth="*"/>
                </Grid>
                <Grid Height="auto">
                    <Label Content="Result" Margin="0,15,10,0"/>
                    <DataGrid x:Name="Result" Height="auto"   ColumnWidth="*"/>
                </Grid>  
                <Grid Height="auto">
                   <WrapPanel  Margin="0,5,0,0" Height="auto">
                     <Button x:Name="Export" Style="{StaticResource IconExport}"  />
                     <Button x:Name="Print" Style="{StaticResource IconPrint}"  />
                    <Button x:Name="Show" Style="{StaticResource IconShow}" />                 
                </WrapPanel>
                </Grid>              
            </StackPanel>
        </ScrollViewer>
        
    </StackPanel>
</UserControl>

1.378 Beiträge seit 2006
vor 9 Jahren

Hallo Create,

DataGrids haben selbst einen ScrollViewer, weswegen sie MouseWheel Events schlucken sobald sie den Fokus haben (Vermutung).

Hier wird das Problem ebenfalls besprochen und ein manuelles (im Code) Scrollen vorgeschlagen:

<StackPanel x:Name="ResultStackPanel" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">


    private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        ScrollViewer scv = (ScrollViewer)sender;
        scv.ScrollToVerticalOffset(scv.VerticalOffset - e.Delta);
        e.Handled = true;
    }

Lg, XXX

C
Create Themenstarter:in
21 Beiträge seit 2013
vor 9 Jahren

Hallo,

das ist die Lösung, vielen Dank!

C
Create Themenstarter:in
21 Beiträge seit 2013
vor 9 Jahren

So ganz rund läuft das Scrollen noch nicht. 😦
Wenn ich mit dem Mausrad scrolle, springt er zum nächsten Label.
Ist das auch eine Sache des Focus?