WPF滚动查看器不滚动.没有拇指,只响应鼠标滚轮
本文关键字:滚动 响应 鼠标 WPF | 更新日期: 2023-09-27 18:02:44
我有一个WPF .Net 4应用程序,其中包含一个按钮,当点击时打开一个新窗口:
CreationWindow creationWindow = new CreationWindow();
creationWindow.Owner = this;
CreationWindow.Show();
窗口显示得很好,但是它包含的列表框(比如100张图片作为内容的列表框项)在滚动条上没有拇指。
下面是这个'CreationWindow'的内容示例
<Window
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"~
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Converters="clr-namespace:Krocr.Client.Converters"
x:Class="Krocr.Client.ComparisonMode"
Title="ComparisonMode" Height="450" Width="700">
<Grid>
<ListBox ItemsSource="{Binding Images}"/>
</Grid>
</Window>
滚动条是可见的,但我不能与它交互。鼠标滚轮滚动列表
然而. .如果我在主窗口添加一个滚动查看器,并添加一些项目。随后的滚动查看器(在新窗口中)可以正常工作…
我没有改变任何样式的列表框或滚动查看器…很困惑!
非常感谢你的帮助,因为它快把我逼疯了。
编辑:添加问题的截图(不能张贴图像,因为我是新的…)
https://i.stack.imgur.com/XdYSs.png我明白了…
这是一个疯狂的视觉树在我的主窗口。Xaml破坏了其他所有东西的呈现……问题在这里:
<Grid Background="#00E5E5E5" Margin="0,75,0,0" Grid.Row="1">
<Viewbox x:Name="docViewBox" Margin="0">
<Grid Margin="5" x:Name="holdingGrid">
<Canvas x:Name="AggLayer" Margin="0" />
<Canvas x:Name="rectCanvas" MouseLeftButtonDown="StartDrag" MouseLeftButtonUp="EndDrag" Background="Transparent"/>
<ListBox x:Name="overlayCanvas" Background="#00FFFFFF" IsHitTestVisible="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="{Binding ActualWidth, ElementName=rectCanvas}" Height="{Binding ActualHeight, ElementName=rectCanvas}"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</Viewbox>
<Canvas x:Name="DialogLayer" Margin="0" />
</Grid>
有了注释,它工作得很好…此外,xaml完全打破混合,导致随机疯狂的行为…
时间优化我觉得…谢谢你的输入:)
编辑:事实上,所有我需要做的是删除Viewbox和事情工作得很好…非常奇怪的编辑2:罪魁祸首是带有画布项目面板的列表框,特别是
<Canvas Width="{Binding ActualWidth, ElementName=rectCanvas}" Height="{Binding ActualHeight, ElementName=rectCanvas}"/>
绑定这些宽度和高度值会导致视框进入无限缩放循环,这会破坏其他东西。愚蠢的我…
这是因为Grid在默认情况下不限制它的子控件的大小,所以ListBox没有意识到它需要滚动。
最快的解决方案是用DockPanel替换Grid,这将约束它的子控件,但这可能需要重新考虑,如果你有更多的子控件要添加以后!