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

时间:2011-07-19 16:15:54

标签: c# .net wpf

我有一个WPF .Net 4应用程序,其中包含一个按钮,单击该按钮可打开一个新窗口:

CreationWindow creationWindow = new CreationWindow();
creationWindow.Owner = this;
CreationWindow.Show();

窗口显示正常,但它包含的列表框(比如100个图像作为内容的listboxitems)在滚动条上没有拇指。

这是'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>

滚动条可见,但我无法与之互动。鼠标滚轮会滚动列表。

无论其..

如果我将滚动查看器添加到主窗口,并向其添加一些项目。随后的滚动查看器(在新窗口中)然后正常工作......

我没有为列表框或滚动查看器改变任何样式......非常困惑!

帮助将非常感激,因为它让我发疯。

编辑:添加了问题的截图(因为我是新手而无法发布图片...)

http://i.stack.imgur.com/XdYSs.png

2 个答案:

答案 0 :(得分:0)

这是因为默认情况下Grid不会限制其子控件的大小,因此ListBox没有意识到它需要滚动。

最快的解决方案是使用DockPanel替换Grid,约束其子级,但如果您有更多的子控件可以在以后添加,则可能需要重新思考!

答案 1 :(得分:0)

我明白了......

在我的mainwindow.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}"/>

绑定那些宽度和高度值导致视图进入无限缩放循环,这打破了其他事情。傻我......