У меня есть пользовательский элемент управления в wpf xaml, который отображает изображение в сетке. Но я не могу прокручивать колесо прокрутки мыши, а полоса прокрутки не перемещается с помощью колеса прокрутки мыши. Я могу перемещать полосу прокрутки, только щелкнув ее и перетащив. Кроме того, мой вид не меняется динамически, когда я перемещаю полосу прокрутки. Только когда она устанавливается в определенном положении, вид изображений сетки меняется. Как исправить эти проблемы?
Вот что я пробовал:
<UserControl x:Class = "ImageGridView.View"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable = "d"
Name = "ParentUserControl"
d:DesignHeight = "350" d:DesignWidth = "350" Loaded = "OnLoad" Unloaded = "OnUnload">
<Grid Name = "TheGrid">
<Grid.RowDefinitions>
<RowDefinition Height = "2*" />
<RowDefinition Height = "*" />
<RowDefinition Height = "2*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "2*" />
<ColumnDefinition Width = "*" />
<ColumnDefinition Width = "2*"/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.RowSpan = "3" Grid.ColumnSpan = "2" VerticalScrollBarVisibility = "Auto" HorizontalScrollBarVisibility = "Auto">
<ItemsControl Name = "myItemControl" ItemsSource = "{Binding DisplayedImages, Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<views:GridPanelNew Rows = "{Binding ViewData.Rows, Mode=OneWay}" Columns = "{Binding ViewData.Columns, Mode=OneWay}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<views:ImagesTemplate Margin = "5" Name = "ImagesTemplate" SourceImage = "{Binding Images, Mode=OneWay}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<ScrollBar Name = "ScrollBarEngagement" Grid.Row = "1" Grid.Column = "2" Minimum = "0" ViewportSize = "{Binding ViewData.ViewportSize, Mode=OneWay}" Maximum = "{Binding ViewData.MaxScroll, Mode=OneWay}" SmallChange = "1" Scroll = "ScrollView" Margin = "0">
<ScrollBar.Triggers>
<EventTrigger RoutedEvent = "Mouse.PreviewMouseDown" >
</EventTrigger>
<EventTrigger RoutedEvent = "Mouse.PreviewMouseUp">
</EventTrigger>
</ScrollBar.Triggers>
</ScrollBar>
</Popup>
</Grid>
</UserControl>
Вам следует отменить «модификации» ScrollViewer и посмотреть, что произойдет; Я считаю, что он работает достаточно хорошо «как есть»: панорамирование, прокрутка и масштабирование; с помощью мыши, прикосновения (нажмите, проведите пальцем, сведите и перетащите) и «командования и управления» (т. е. кнопок).
@BionicCode Как мне изменить прокрутку элементов? я не понимаю
Это решило мою проблему:
<views:GridPanelNew Rows="{Binding ViewData.Rows, Mode=OneWay}" Columns="{Binding ViewData.Columns, Mode=OneWay}" PreviewMouseWheel="GridPanelNew MouseWheel"/>
И обработка значения дельты изменения колеса мыши в моем xaml.cs
Можете ли вы создать минимальный воспроизводимый пример и удалить весь ненужный код? Если удаление ваших пользовательских элементов управления нарушает ошибочное поведение и вам необходимо добавить их для репликации ошибки, добавьте также исходный код этих элементов управления. В общем, вам не следует помещать ItemsControl в ScrollViewer, а следует использовать ItemsPresenter элемента ItemsControl. Вы хотите прокручивать элементы, а не элемент управления.