2015-04-21 17 views
5

Bir Wpf denetiminde bir avalonEdit 'kutu' etrafında göstermek için bir kenarlık elde etmeye çalışıyorum, ancak bunun gerçekleşmesi mümkün görünmüyor.Kenarlık göster avalonEdit: TextEditor

BorderBrush="Black" BorderThickness="2" ekledim ama açıkça bir şeyleri özlüyorum.

Ben googled ettik ama, benim çabalarına rağmen, ben bir şey bulamıyorum - Ben Google için doğru terminoloji bilmiyorum çünkü sanki düz olması gerektiğini hissediyor sanıyordum!

Kod aşağıdaki gibi:

enter image description here

ama 'avalonEdit' kutusunun görüntülenmesini görünmüyor: Bu gibi işler

<Label Content="Account:" HorizontalAlignment="Left" Margin="10,28,0,0" VerticalAlignment="Top"/> 
    <TextBox Name ="textBoxAccount" HorizontalAlignment="Left" Height="23" Margin="66,28,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120"/> 
    <Label Content="Query:" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top"/> 

    <Button x:Name="btnGo" Content="Go!" HorizontalAlignment="Left" Height="25" Margin="10,342,0,0" VerticalAlignment="Top" Width="146"/> 

    <avalonEdit:TextEditor 
     xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit" 
     x:Name="textEditor" 
     FontFamily="Consolas" 
     SyntaxHighlighting="AWQL" 
     ScrollViewer.VerticalScrollBarVisibility="Hidden" 
     WordWrap="True" 
     Visibility="Visible" 
     BorderBrush="Black" BorderThickness="2" 
     FontSize="10pt" Margin="12,89.96,10,0" Height="229" VerticalAlignment="Top"/> 
</Grid> 

kenarlık invi görünüyor Bir kullanıcı girip tıklayana kadar yazabilir ve yazmaya başlar.

Sınırların kullanıcı denetiminin en üstündeki basit metin kutusuyla aynı görünmesini çok isterdim, ancak şu anda görünür olan her şey için yerleşirdim!

cevap

4

Sadece bir kere avalon ile çalıştım, bu yüzden istediğini yapan hızlı bir proje hazırladım.

Bir feragatname olarak, AvalonEdit sizin söylediğiniz gibi bir kenarlık koyma girişimini berbat görünüyor. Bu yüzden etrafına bir kenarlık koymak için bir ızgara kullanarak kurdum.

Bordered Avalon Edit

Ve kod aşağıdaki gibi görünecektir:

Böyle bir şey olacaktır

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Width="600" Height="500" 
    xmlns:avalonEdit="http://icsharpcode.net/sharpdevelop/avalonedit"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 

    <Label Grid.Column="0" Grid.Row="0" Content="Account:" HorizontalAlignment="Left" Margin="20,20" VerticalAlignment="Top" Height="26" Width="56" /> 
    <TextBox Grid.Column="1" Grid.Row="0" Name="textBoxAccount" HorizontalAlignment="Left" Height="26" Margin="20" TextWrapping="Wrap" 
      VerticalAlignment="Top" Width="120" /> 
    <Label Grid.Column="0" Grid.Row="1" Content="Query:" HorizontalAlignment="Left" Margin="20,0" VerticalAlignment="Top" Height="26" Width="45" /> 

    <Border Grid.ColumnSpan="2" 
      Grid.Row="2" 
      Grid.Column="0" BorderBrush="Black" BorderThickness="1" 
      Margin="20" 
      Height="230"> 
     <avalonEdit:TextEditor 
      x:Name="textEditor" 
      FontFamily="Consolas" 
      SyntaxHighlighting="AWQL" 
      ScrollViewer.VerticalScrollBarVisibility="Hidden" 
      WordWrap="True" 
      Visibility="Visible" 
      FontSize="10pt" VerticalAlignment="Top" Height="226"/> 
    </Border> 


    <Button Grid.Column="0" Grid.Row="3" x:Name="btnGo" Content="Go!" HorizontalAlignment="Left" Height="25" Margin="20" 
      VerticalAlignment="Top" Width="146" /> 

</Grid> 

Bu tam olarak ne istediğini değil, bir grid uzun vadede diğer konularda da yardımcı olacaktır

TextEditor stili ( TextEditor.xaml):
+0

Kesinlikle bir gelişme olan bu açıklama/çözüm için teşekkür ederiz. Sınırı nasıl oluşturabileceğime dair herhangi bir fikir, yukarıdaki basit metin kutusunun etrafındaki kenarlık ile aynı stilde görünüyor mu? –

+0

[This] (https://msdn.microsoft.com/en-us/library/ms752068%28v=vs.110%29.aspx) metin kutusu için varsayılan stili göstermelidir. Renkleri, yarıçapı ve daha fazlasını kopyalarsanız, aynı olmalıdır. –

2

avalonEdit ile çalışmadım ama size başka bir yol önerebilirim: TextEditor ürününü <Border> </Border> içine sarabilirsiniz.

Muhtemelen en iyi çözüm değil ama bir tanesidir.

+0

Öneri için çok teşekkürler, ancak daha iyi bir çözüm bulmayı umuyorum.Bu öneri sadece her şey etrafında bir sınır oluşturur gibi (sadece avalonEdit metin kutusu) - Ben muhtemelen kenar boşlukları vb tarafından daha iyi yapmak için birlikte kludge olabilir ama bir yerde basit bir şey özlüyor gibi hissediyor –

+0

Ben kazmak öneririz neler olup bittiğini öğrenmek için şablona! – Asheh

4

BuavalonEdit olan

<Style TargetType="{x:Type AvalonEdit:TextEditor}"> 
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}" /> 
    <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" /> 
    <Setter Property="FlowDirection" Value="LeftToRight"/> <!-- AvalonEdit does not support RTL, so ensure we use LTR by default --> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type AvalonEdit:TextEditor}"> 
       <ScrollViewer 
        Focusable="False" 
        Name="PART_ScrollViewer" 
        CanContentScroll="True" 
        VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}" 
        HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" 
        Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TextArea}" 
        VerticalContentAlignment="Top" 
        HorizontalContentAlignment="Left" 
        Background="{TemplateBinding Background}" 
        Padding="{TemplateBinding Padding}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
       /> 
       <ControlTemplate.Triggers> 
        <Trigger Property="WordWrap" 
          Value="True"> 
         <Setter TargetName="PART_ScrollViewer" 
           Property="HorizontalScrollBarVisibility" 
           Value="Disabled" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Ve bu ScrollViewer sınırları göstermiyor neden bir açıklama var: Yani https://social.msdn.microsoft.com/Forums/vstudio/en-US/a2310302-167b-44e2-bc23-825ff1610701/scrollviewer-border

, ben en iyi yolu sarmak için olduğunu düşünüyorum TextEditor bir Sınırın içinde Guerudo says olarak veya şablonu Avalon code TextEditor.xaml'da değiştirir.