Laden...

Scrollen, wenn mehrere DataTable-Elemente im Scrollviewer sind

Letzter Beitrag vor 9 Jahren 4 Posts 1.247 Views
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>

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

Hallo,

das ist die Lösung, vielen Dank!

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?