【发布时间】:2019-07-09 14:25:57
【问题描述】:
我有以下相当简单的代码
<Window ... Width=400 Height=400>
<ScrollViewer HorizontalScrollBarVisibility="Auto" >
<StackPanel VerticalAlignment="Top"
HorizontalAlignment="Left">
<TextBox TextWrapping="Wrap"
Margin="0,5,0,5"
Width="500"
Padding="20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBox>
<StackPanel Orientation="Horizontal">
<Label Content="aswkognweklng"></Label>
<TextBox TextWrapping="Wrap"
Margin="0,5,0,5"
Width="500"
Padding="20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBox>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Window>
我想禁用以下行为:
- 滚动条可见
- 点击第一个文本框中的文本
- 单击第二个文本框中的填充区域
=>滚动查看器将移动滚动条,使文本框左边框与可见窗口边框对齐
我想禁用此自动滚动行为。这可能吗?
用户交互的默认滚动行为应该仍然有效。因此,当用户与滚动条交互时,它应该会正常滚动内容。
【问题讨论】:
-
滚动行为由
FrameworkElement.RequestBringIntoViewEvent触发。它是一个路由事件,在调用FrameworkElement.BringIntoView时引发(由焦点处理程序FrameworkElement.OnGotFocus调用)。父ScrollViewer订阅此事件并通过将子元素居中来处理它,该子元素是相对于视口的事件源。 -
如果只需要显示文字,最好使用
TextBlock。它对性能的影响较小,并且不会触发ScrollViewer的滚动到视图行为。 -
@BionicCode 我也需要能够编辑文本
标签: c# wpf scrollviewer