在我的应用程序中,我有不同的页面,每个页面加载到主应用程序页面的框架中。
现在 每个页面都有两个名为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>
程序工作正常,如果我将整个网格包装,但侧边栏也随之移动。
答案 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属性来控制哪个元素位于顶部。