programing

스크롤 뷰어 마우스 휠이 스크롤되지 않음

telebox 2023. 5. 22. 20:57
반응형

스크롤 뷰어 마우스 휠이 스크롤되지 않음

저는 현재 첫 번째 WPF 프로젝트를 진행하고 있으며, 이 프로젝트를 만들기 위해 노력하고 있습니다.ListView스크롤 가능한처음에 저는 이것이 단순히 제한만 하면 쉽게 이루어질 수 있다고 생각했습니다.ListView의 너비와 높이로 인해 내용이 공간을 초과할 때마다 스크롤 막대가 자동으로 나타납니다.처음에는 문제가 없을 것 같았지만 처리된 문제 때문에PreviewMouseDown이벤트(목록의 항목을 끌 수 있음) 항목을 선택한 후에는 작동하지 않습니다.

번째 시도(사용)ScrollViewer)

<ScrollViewer>
    <ListView ItemsSource="{Binding FileViewModels}"
              PreviewMouseDown="ListView_MouseMove"
              Height="450" Width="200"/>
</ScrollViewer>

물론 목록의 내용이 최대 높이보다 커질 때마다 두 번째 스크롤 막대가 생성됩니다.그리고 아이템을 선택한 후에도 바를 끄는 것은 여전히 작동하지 않았습니다.

번째(매우 어리석은) 시도(스크롤 모음 중복 사용 안 함)

<ScrollViewer>
    <ListView ItemsSource="{Binding FileViewModels}"
              PreviewMouseDown="ListView_MouseMove"
              Height="450" Width="200"
              ScrollViewer.VerticalScrollBarVisibility="Disabled"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
</ScrollViewer>

이렇게 하면 스크롤바 중복이 제거되고 마우스 휠을 통해 스크롤할 수 있지만 스크롤바가 비활성화되어 클릭하고 끌어서 이동할 수 없습니다.

번째 시도(일정한 크기의 데이터)ScrollViewer)

<ScrollViewer Height="450" Width="200">
    <ListView ItemsSource="{Binding FileViewModels}"
              PreviewMouseDown="ListView_MouseMove"/>
</ScrollViewer>

에서 너비/높이 제약 조건을 제거했습니다.ListView그리고 그것을 그 곳으로 옮겼습니다.ScrollViewer이렇게 하면 스크롤 막대가 활성화되고 중복 항목이 제거됩니다.안타깝게도 마우스 휠이 더 이상 작동하지 않습니다(스크롤 막대를 끌면 잘 작동합니다).

누가 마우스 휠이 더 이상 작동하지 않는 이유와 해결 방법을 설명해 주시겠습니까?

편집 첫 번째 솔루션으로 돌아가야 할 것 같습니다.

분명히, 그.ListView의 템플릿에 이미 다음이 포함되어 있습니다.ScrollViewer남은 문제는 항목을 선택한 후 스크롤 막대를 끌 수 없다는 것입니다. 왜냐하면 처리되었기 때문입니다.PreviewMouseDown이벤트(마우스를 통해 스크롤)휠은 이 경우에도 작동합니다.)항목 끌기를 다르게 처리해야 합니까(스크롤바를 추가하기 전에는 잘 작동했습니다)?또는 커서가 스크롤 막대 위에 있는지 감지할 수 있는 방법이 있습니까? 그러면 스크롤할 수 있는 항목을 선택 취소할 수 있습니다.아니면 다른 제안이 있습니까?

이것은 당신에게 도움이 될 것입니다.

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

이것이 아마도 가장 편안한 해결책일 것입니다.

<ListView.Template>
    <ControlTemplate>
        <ScrollViewer>
            <ItemsPresenter></ItemsPresenter> 
        </ScrollViewer>
    </ControlTemplate>
</ListView.Template>

제게는 효과가 있었습니다.

<ListView.Template>
    <ControlTemplate>
        <!-- Empty template to allow ScrollViewer to capture mouse scroll -->
        <ItemsPresenter />
    </ControlTemplate>
</ListView.Template>

이 대신에:

<ListView.Template>
    <ControlTemplate>
        <ScrollViewer>
            <ItemsPresenter></ItemsPresenter>
        </ScrollViewer>
    </ControlTemplate>
</ListView.Template>
<ScrollViewer Background="Transparent">

한다면Backgroundnull입니다. 마우스 휠이 작동하지 않습니다.ScrollViewer설정할 수 있습니다.Background로.Transparent또는 다른 가치.

저의 경우 다음과 같은 도움이 되었습니다.

<ScrollViewer ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Auto" >
    <DataGrid x:Name="dataGrid" SelectionMode="Single" ItemsSource="{Binding}"  SelectedValuePath="{Binding Item}" AutoGenerateColumns="True">
    </DataGrid>
</ScrollViewer>

설계가 비활성화되었습니다.VerticalScrollBarVisibility외부 범위의 속성, 즉ScrollViewer.

로키가 제공한 솔루션에 대한 의견을 추가하고 싶습니다., 창에서 때 .Grid했습니다: 저는문직습니다했면제에:ScrollViewer맨 아래 끝까지 스크롤하지 않았습니다. 그이는환설는시때도다니문입려정을 하려는 시도 때문이었습니다.VerticalOffset에게 잘 합니다(). 아래 코드는 저에게 잘 작동합니다. (그냥 변경하면 됩니다.)PreviewMouseWheel처리기:

private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    ScrollViewer scroll = (ScrollViewer)sender;
    if (e.Delta < 0)
    {
        if (scroll.VerticalOffset - e.Delta <= scroll.ExtentHeight - scroll.ViewportHeight)
        {
            scroll.ScrollToVerticalOffset(scroll.VerticalOffset - e.Delta);
        }
        else
        {
            scroll.ScrollToBottom();
        }
    }
    else
    {
        if (scroll.VerticalOffset + e.Delta > 0)
        {
            scroll.ScrollToVerticalOffset(scroll.VerticalOffset - e.Delta);
        }
        else
        {
            scroll.ScrollToTop();
        }
    }
    e.Handled = true;
}

언급URL : https://stackoverflow.com/questions/16234522/scrollviewer-mouse-wheel-not-scrolling

반응형