스크롤 뷰어 마우스 휠이 스크롤되지 않음
저는 현재 첫 번째 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
'programing' 카테고리의 다른 글
| 음수 정수를 0으로 설정할 .NET Math 메서드를 찾고 있습니다. (0) | 2023.05.22 |
|---|---|
| 강력한 매개 변수를 사용하여 배열을 허용하는 방법 (0) | 2023.05.22 |
| 인증서 확인 실패: 로컬 발급자 인증서를 가져올 수 없습니다. (0) | 2023.05.22 |
| jQuery UI 변경 이벤트 문제에 대한 날짜 선택기 (0) | 2023.05.22 |
| 'array_keys()'를 호출하지 않고 array_map()로 1단계 키 액세스 (0) | 2023.05.22 |