簡體   English   中英

如何為子控件禁用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>

我想禁用以下行為:

  • 滾動條可見
  • 單擊第一個文本框中的文本
  • 單擊第二個文本框中的填充區域

=>滾動查看器將移動滾動條,以使文本框左邊框與可見窗口邊框對齊

我想禁用此自動滾動行為。 那可能嗎?

與用戶交互的默認滾動行為仍應起作用。 因此,當用戶與滾動條交互時,它應該正常滾動內容。

首先點擊文本框 單擊填充區域后

對的,這是可能的。 您只需要處理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;
}

如果我了解您對問題的描述,可以使用:

<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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM