2015-04-21 11 views
5

Sto cercando di ottenere un bordo da mostrare attorno a un avalonEdit 'box' in un controllo Wpf ma non riesco a farlo accadere.Mostra il bordo su avalonEdit: TextEditor

Ho aggiunto BorderBrush="Black" BorderThickness="2" ma chiaramente mi manca qualcosa.

Ho cercato su Google ma, nonostante i miei sforzi, non riesco a trovare nulla - sospetto che non conosca la terminologia corretta per Google perché sembra che debba essere semplice!

codice come segue:

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

che rende in questo modo:

enter image description here

ma la casella 'avalonEdit' non sembra per il rendering il confine quindi sembra invi sible a meno che/fino a quando un utente non fa clic all'interno e inizia a digitare.

Mi piacerebbe molto che il bordo abbia lo stesso aspetto della semplice casella di testo nella parte superiore del controllo utente, ma in questo momento mi accontenterò di qualsiasi cosa visibile!

risposta

4

Ho lavorato solo una volta con Avalon, quindi ho preparato un progetto rapido che fa quello che vuoi.

Come dichiarazione di non responsabilità, AvalonEdit sembra rovinare qualsiasi tentativo di mettere un confine intorno a esso come hai detto tu. Così l'ho impostato usando una griglia per mettere un bordo attorno ad esso.

Si sarà simile a questo:

Bordered Avalon Edit

E il codice sarà simile a questa:

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

Questo non è esattamente ciò che si vuole, ma un la griglia aiuterà anche altre questioni a lungo termine

+0

Grazie per questa spiegazione/soluzione che è sicuramente un miglioramento. Qualche idea su come posso rendere il bordo simile allo stesso stile del bordo attorno alla semplice casella di testo sopra di esso? –

+0

[Questo] (https://msdn.microsoft.com/en-us/library/ms752068%28v=vs.110%29.aspx) dovrebbe mostrare lo stile predefinito per la casella di testo. Se copi i colori, il raggio e altro, dovrebbe essere lo stesso. –

2

Non ho lavorato con avalonEdit ma posso suggerire un altro modo: è possibile avvolgere il proprio TextEditor all'interno di uno <Border> </Border>.

Probabilmente non è la soluzione migliore, ma è uno.

+0

Grazie mille per il suggerimento, ma spero in una soluzione migliore.Come questo suggerimento rende solo un confine attorno all'intera cosa (non solo la casella di testo di avalonEdit) - potrei probabilmente blandirlo insieme per renderlo migliore modificando i margini ecc. Ma sembra che manchi qualcosa di semplice da qualche parte –

+0

Ti suggerirei di scavare nel modello per scoprire cosa sta succedendo! – Asheh

4

Questa è l'avalonEdit: stile TextEditor (TextEditor.xaml):

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

e questa è una spiegazione sul perché ScrollViewer non mostra i confini: https://social.msdn.microsoft.com/Forums/vstudio/en-US/a2310302-167b-44e2-bc23-825ff1610701/scrollviewer-border

Quindi, penso che il modo migliore è quello di avvolgere TextEditor all'interno di un bordo come Guerudo says o modificare il modello nel codice Avalon TextEditor.xaml.

Problemi correlati