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

WPF滚动查看器不滚动.没有拇指,只响应鼠标滚轮

我明白了…

这是一个疯狂的视觉树在我的主窗口。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,这约束它的子控件,但这可能需要重新考虑,如果你有更多的子控件要添加以后!