использование события PreviewMouseWheel в scrollviewer плохо влияет на выпадающий список - PullRequest
0 голосов
/ 19 февраля 2020

Уважаемый, у меня есть ScrollViewer со стековой панелью, ориентированной по горизонтали, и содержит много выпадающих списков. Я пытаюсь прокрутить ScrollViewer по горизонтали и работает, но выпадающий список теряет способность прокручивать, как решить эту проблему, и вынуждает программу прокручивать необходимый элемент не всегда. scrollviewer спасибо

    <Grid Name="WindowBody" Margin="2 0 2 0" Grid.Column="1" Background="Transparent" ShowGridLines="False" Height="28" VerticalAlignment="Top">
                                            <ScrollViewer Name="ScrollTest" Height="33" VerticalAlignment="Center" Margin="0 0 0 0" Padding="0 1 0 0"
                                                HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"
                                                          PreviewMouseWheel="ScrollTest_PreviewMouseWheel">

                                                        <StackPanel Orientation="Horizontal" Name="toolBar" Background="Transparent">
<!--there is many comboboxes and other uielements-->
<ComboBox Width="200">
                                                        <ComboBoxItem IsSelected="True">a</ComboBoxItem>
                                                        <ComboBoxItem>b</ComboBoxItem>
                                                        <ComboBoxItem>c</ComboBoxItem>
                                                        <ComboBoxItem>d</ComboBoxItem>
                                                        <ComboBoxItem>e</ComboBoxItem>
                                                        <ComboBoxItem>f</ComboBoxItem>
                                                        <ComboBoxItem>g</ComboBoxItem>
                                                        <ComboBoxItem>h</ComboBoxItem>
                                                        <ComboBoxItem>j</ComboBoxItem>
                                                        <ComboBoxItem>k</ComboBoxItem>

                                                    </ComboBox>
</StackPanel>
</ScrollViewer>
</Grid>

и вот код

private void ScrollTest_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        var scrollViewer = sender as ScrollViewer;
        //MessageBox.Show( e.OriginalSource.ToString());

        if (scrollViewer == null)
            return;

        if (Keyboard.Modifiers == ModifierKeys.Shift)
        {
            if (e.Delta < 0)
                scrollViewer.LineRight();
            else
                scrollViewer.LineLeft();
        }
        else
        {
            if (e.Delta < 0)
                scrollViewer.LineDown();
            else
                scrollViewer.LineUp();
        }

        e.Handled = true;
    }
...