如何在 Scrollviewer 上禁用子控件的自动滚动
How to disable auto scroll on Scrollviewer for child controls
我有以下相当简单的代码
<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>
我想禁用以下行为:
- 滚动条可见
- 单击第一个文本框中的文本
- 单击第二个文本框中的填充区域
=> 滚动查看器将移动滚动条,以便文本框左边框与可见 window 边框对齐
我想禁用此自动滚动行为。这可能吗?
用户交互的默认滚动行为应该仍然有效。因此,当用户与滚动条交互时,它应该正常滚动内容。
如果我理解你对问题的描述,你可以使用:
<ScrollViewer HorizontalScrollBarVisibility="Hidden" >...
或者 Grid
更符合您的要求:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox
Grid.Column="0"
Grid.ColumnSpan="2"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
Height="100"
Margin="0,5,0,5"
Padding="20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBox>
<Label
Content="aswkognweklng"
Grid.Column="0"
Grid.Row="1">
</Label>
<TextBox
TextWrapping="Wrap"
AcceptsReturn="True"
Height="100"
VerticalScrollBarVisibility="Auto"
Margin="0,5,0,5"
Grid.Column="1"
Grid.Row="1"
Padding="20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBox>
</Grid>
是的,这是可能的。您只需要处理 ScrollViewer
冒泡到第二个 StackPanel
的 RequestBringIntoView 事件。只需将其标记为已处理。
XAML:
<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" RequestBringIntoView="StackPanel_RequestBringIntoView">
<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>
C#:
private void StackPanel_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}
我有以下相当简单的代码
<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>
我想禁用以下行为:
- 滚动条可见
- 单击第一个文本框中的文本
- 单击第二个文本框中的填充区域
=> 滚动查看器将移动滚动条,以便文本框左边框与可见 window 边框对齐
我想禁用此自动滚动行为。这可能吗?
用户交互的默认滚动行为应该仍然有效。因此,当用户与滚动条交互时,它应该正常滚动内容。
如果我理解你对问题的描述,你可以使用:
<ScrollViewer HorizontalScrollBarVisibility="Hidden" >...
或者 Grid
更符合您的要求:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox
Grid.Column="0"
Grid.ColumnSpan="2"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
Height="100"
Margin="0,5,0,5"
Padding="20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBox>
<Label
Content="aswkognweklng"
Grid.Column="0"
Grid.Row="1">
</Label>
<TextBox
TextWrapping="Wrap"
AcceptsReturn="True"
Height="100"
VerticalScrollBarVisibility="Auto"
Margin="0,5,0,5"
Grid.Column="1"
Grid.Row="1"
Padding="20">Scrolling is enabled when it is necessary.
Resize the window, making it larger and smaller.</TextBox>
</Grid>
是的,这是可能的。您只需要处理 ScrollViewer
冒泡到第二个 StackPanel
的 RequestBringIntoView 事件。只需将其标记为已处理。
XAML:
<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" RequestBringIntoView="StackPanel_RequestBringIntoView">
<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>
C#:
private void StackPanel_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
{
e.Handled = true;
}