首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScrollViewer不使用Avalonedit滚动到底部

ScrollViewer不使用Avalonedit滚动到底部
EN

Stack Overflow用户
提问于 2014-12-28 00:10:07
回答 2查看 1.1K关注 0票数 1

我已经创建了一个用户控件,它使用avalonedit控件。用户控件的XAML是:

代码语言:javascript
复制
<UserControl x:Class="CodeNote.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit"         
             xmlns:editing="clr-namespace:ICSharpCode.AvalonEdit.Editing">

    <UserControl.Resources>
        <ControlTemplate x:Key="TextBoxBaseControlTemplate1" TargetType="{x:Type TextBoxBase}">
            <Border Background="{TemplateBinding Background}" 
                x:Name="Bd" BorderBrush="#D1D1E8"
                BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10, 10, 0, 0">
                <ScrollViewer x:Name="PART_ContentHost"/>
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" TargetName="Bd"/>
                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                </Trigger>
                <Trigger Property="Width" Value="Auto">
                    <Setter Property="MinWidth" Value="100"/>
                </Trigger>
                <Trigger Property="Height" Value="Auto">
                    <Setter Property="MinHeight" Value="20"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>


    </UserControl.Resources>



    <Grid>
        <StackPanel Margin="0,0,0,10">
            <TextBox x:Name="txtTitle" VerticalContentAlignment="Center" Template="{StaticResource TextBoxBaseControlTemplate1}" FontWeight="Bold" Margin="5,5,5,0" Padding="5, 3, 5, 2" FontFamily="Arial" FontSize="12" BorderThickness="1,1,1,0" Background="#FFF0F0F0"></TextBox>

            <Border BorderThickness="1" CornerRadius="0,0,10,10" BorderBrush="#D1D1E8" Background="#FFF7F7F9" Margin="5,0,5,0" Padding="5,5,5,5">
                <avalonEdit:TextEditor
                    xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"
                    Name="textEditor"
                    FontFamily="Courier New"
                    SyntaxHighlighting="Java"
                    Background="#FFF7F7F9"
                    ShowLineNumbers="True"
                    VerticalScrollBarVisibility="Hidden"
                    HorizontalScrollBarVisibility ="Hidden" 
                    WordWrap="True"                    
                    FontSize="12pt"/>
            </Border>


        </StackPanel>
    </Grid>

</UserControl>

主窗口在网格中的StackPanel中包含以下ScrollViewer

代码语言:javascript
复制
<Window x:Class="CodeNote.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:avalonedit="http://icsharpcode.net/sharpdevelop/avalonedit"         
        xmlns:editing="clr-namespace:ICSharpCode.AvalonEdit.Editing"
        x:Name="mainWin"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <ScrollViewer VerticalScrollBarVisibility="Visible" CanContentScroll="False">

            <StackPanel Grid.Row="0" Margin="10,10,10,0" VerticalAlignment="Top"  x:Name="container">



            </StackPanel>

        </ScrollViewer>

    </Grid>


</Window>

用户应该能够以编程方式将用户控件添加到主窗口,这是在后面的主窗口代码中完成的:

UserControl1 avEditor = new UserControl1(); container.Children.Add(avEditor);

我的问题是,当avalonedit控件的内容垂直于窗口变得太大时,滚动查看器不会滚动到底部。插入点从可见窗口底部消失,滚动位置停留在顶部。

我注意到,如果我添加一个常规文本框而不是avalonedit控件,滚动就能正常工作。

我如何纠正这个问题(我对WPF非常陌生)

请注意,该程序需要能够向此滚动查看器添加多个文本输入控件,例如雪崩,后面跟着一个文本框,然后是另一个文本框,然后是另一个雪崩。因此,我不能只使用滚动查看器的ScrollToBottom方法,因为正在编辑的控件可能不是滚动查看器中的最后一个控件。

我只需要插入点保持屏幕和窗口滚动相应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-09 19:39:31

看起来Caret.BringCaretToView()只滚动AvalonEdit本身,它不会将BringIntoView请求发送到可视树上。

我认为您需要修改AvalonEdit源代码来解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2021-09-17 22:03:45

我不是专家,但下面是我所使用的伪尾巴使用AvalonEdit。_scroll只是一个复选框,用户可以取消选中以停止滚动。

代码语言:javascript
复制
private void PullAndLoadData()

    {
        Task.Delay(1000);
        TailFile = TailFile + _logStream.Read();
        Dispatcher.Invoke(() => { textEditor.Text = TailFile; });
    
        if (_scroll) Dispatcher.Invoke(() => { textEditor.ScrollToEnd(); });
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27672643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档