0

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

现在每个页面都有两个 StackPanel,分别命名为 left 和 right。左面板扮演侧边栏的角色,不应该随着所有页面滚动,所以我只将右 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>

如果我将整个网格包裹起来,但侧边栏也会随之移动,程序可以正常工作。

4

1 回答 1

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 属性来控制哪个元素位于顶部。

于 2013-12-27T23:12:07.227 回答