2014-12-28 4 views
1

Я создал пользовательский элемент управления, который использует элемент управления avalonedit. XAML для пользовательского элемента управления является:ScrollViewer не прокручивается в нижнее положение Использование Avalonedit

<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 внутри сетки

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

пользователь должен иметь возможность программно добавить UserControl в главном окне, которая осуществляется в основном коде окна сзади:

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

Моя проблема в том, что Scrollview er не прокручивается до нижней части, когда содержимое элемента управления avalonedit становится слишком вертикально большим для окна. Точка вставки просто исчезает в нижней части видимого окна, а положение прокрутки остается вверху.

Я заметил, что прокрутка работает правильно, если я добавляю обычный текстовый блок вместо элемента управления avalonedit.

Как я могу это исправить (я новичок в WPF)

Пожалуйста, обратите внимание, что программа должна быть в состоянии добавить несколько элементов управления ввода текста в этой прокрутки просмотра, например avalonedit, за которым следует текстовое поле с последующим другое текстовое поле, за которым следует еще один avalonedit. Поэтому я не могу просто использовать метод ScrollToBottom scrollviewer, потому что редактируемый элемент управления может быть не последним элементом управления в scrollviewer.

Мне просто нужно, чтобы точка ввода оставалась на экране, а окно для прокрутки соответствовало.

ответ

0

Похоже, Caret.BringCaretToView() только прокручивает AvalonEdit сам, он не отправляет BringIntoView запрашивает визуальное дерево.

Я думаю, вам нужно будет исправить исходный код AvalonEdit, чтобы исправить это.

Смежные вопросы