ScrollViewer在同一页面上出现多个面板问题

时间:2013-10-07 23:34:06

标签: c#-4.0 user-interface wpf-controls scrollviewer stackpanel

在我的应用程序中,我有不同的页面,每个页面加载到主应用程序页面的框架中。

现在 每个页面都有两个名为left和right的StackPanel。左侧面板扮演侧栏的角色,不应该滚动所有页面所以我只包装右侧StackPanel ...并且右侧部分工作正常。但当我这样做并运行我的应用程序左面板停止响应,我甚至无法点击它的子控件,如文本框...

<Grid>
    <StackPanel Orientation="Vertical" Width="230">
        <Label Content="write message"/>
        <RichTextBox Height="300" >
            <FlowDocument/>
        </RichTextBox>
        <Label Content="Remaining Characters: 160" />
        <TextBox />
        <Button Content="SEND"/>
    </StackPanel>
    <ScrollViewer VerticalScrollBarVisibility="Auto" >
        <StackPanel CanVerticallyScroll="True"  Margin="230,0,0,40" Orientation="Vertical" MinHeight="600" ScrollViewer.CanContentScroll="True"/>
    </ScrollViewer>
</Grid>

程序工作正常,如果我将整个网格包装,但侧边栏也随之移动。

1 个答案:

答案 0 :(得分:0)

将stackpanel和scrollviewer放在同一个网格中并不是一个好主意。由于它们没有任何ZIndex属性,我相信右侧面板位于顶部,左侧面板停止响应鼠标事件。 尝试使用不同的列:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <StackPanel Orientation="Vertical" Width="230" Grid.Column="0">
            <Label Content="write message"/>
            <RichTextBox Height="200" >
                <FlowDocument/>
            </RichTextBox>
            <Label Content="Remaining Characters: 160" />
            <TextBox />
            <Button Content="SEND"/>
        </StackPanel>
        <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Column="1" >
            <StackPanel CanVerticallyScroll="True"  Margin="10,0,0,40" Orientation="Vertical" MinHeight="800" ScrollViewer.CanContentScroll="True">
                <Border Width="200" Height="600" Background="LightBlue"/>
            </StackPanel>
        </ScrollViewer>
    </Grid>

如果您不想使用多列,则必须使用画布,您可以通过更改ZIndex属性来控制哪个元素位于顶部。