Browse Source

Merge pull request #4251 from Gillibald/fixes/FluentTextBox

Fix text wrapping for fluent TextBox
danwalmsley 5 years ago
parent
commit
74a0940368

+ 1 - 1
src/Avalonia.Controls/TextBox.cs

@@ -134,7 +134,7 @@ namespace Avalonia.Controls
                 {
                     if (acceptsReturn)
                     {
-                        return wrapping == TextWrapping.NoWrap ?
+                        return wrapping != TextWrapping.Wrap ?
                             ScrollBarVisibility.Auto :
                             ScrollBarVisibility.Disabled;
                     }

+ 49 - 56
src/Avalonia.Themes.Fluent/TextBox.xaml

@@ -10,73 +10,65 @@
     <Setter Property="SelectionBrush" Value="{DynamicResource TextControlSelectionHighlightColor}" />
     <Setter Property="BorderThickness" Value="{DynamicResource TextControlBorderThemeThickness}" />    
     <Setter Property="FontSize" Value="{DynamicResource ControlContentThemeFontSize}" />
-    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden" />
-    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
     <Setter Property="MinHeight" Value="{DynamicResource TextControlThemeMinHeight}" />
     <Setter Property="MinWidth" Value="{DynamicResource TextControlThemeMinWidth}" />
     <Setter Property="Padding" Value="{DynamicResource TextControlThemePadding}" />
     <Setter Property="Template">
       <ControlTemplate>
-        <Grid RowDefinitions="Auto, *, Auto" ColumnDefinitions="*, Auto">
+        <DockPanel>
 
           <!-- TODO bind Content -> Header and ContentTemplate -> HeaderTemplate -->
           <ContentPresenter x:Name="HeaderContentPresenter"
-                            Grid.Row="0"
-                            Grid.Column="0"
-                            Grid.ColumnSpan="2"
+                            DockPanel.Dock="Top"
                             TextBlock.FontWeight="Normal"
                             TextBlock.Foreground="{DynamicResource TextControlHeaderForeground}"
                             IsVisible="False"
                             Margin="{DynamicResource TextBoxTopHeaderMargin}" />
-          
-          <Border Name="border"
-                  Grid.Row="1"
-                  Grid.Column="0"
-                  Grid.RowSpan="1"
-                  Grid.ColumnSpan="2"
-                  Background="{TemplateBinding Background}"
-                  BorderBrush="{TemplateBinding BorderBrush}"
-                  BorderThickness="{TemplateBinding BorderThickness}"
-                  CornerRadius="{DynamicResource ControlCornerRadius}"
-                  Margin="{TemplateBinding BorderThickness}"
-                  MinWidth="{TemplateBinding MinWidth}"
-                  MinHeight="{TemplateBinding MinHeight}">
-          </Border>
-
-          <Border Padding="{TemplateBinding Padding}"
-            Grid.Row="1"
-            Grid.Column="0"
-            Margin="{TemplateBinding BorderThickness}">
-            <DockPanel>
-              <TextBlock Name="floatingWatermark"
-                         Foreground="{DynamicResource SystemAccentColor}"
-                         FontSize="{DynamicResource FontSizeSmall}"
-                         Text="{TemplateBinding Watermark}"
-                         DockPanel.Dock="Top">
-                <TextBlock.IsVisible>
-                  <MultiBinding Converter="{x:Static BoolConverters.And}">
-                    <Binding RelativeSource="{RelativeSource TemplatedParent}"
-                             Path="UseFloatingWatermark"/>
-                    <Binding RelativeSource="{RelativeSource TemplatedParent}"
-                             Path="Text"
-                             Converter="{x:Static StringConverters.IsNotNullOrEmpty}"/>
-                  </MultiBinding>
-                </TextBlock.IsVisible>
-              </TextBlock>
-
-              <DataValidationErrors>
-                <ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding (ScrollViewer.HorizontalScrollBarVisibility)}"
-                              VerticalScrollBarVisibility="{TemplateBinding (ScrollViewer.VerticalScrollBarVisibility)}">
-
-                  <Panel>
-                    <TextBlock Name="watermark"
+
+          <Panel>
+            <Border
+              Name="border"
+              Background="{TemplateBinding Background}"
+              BorderBrush="{TemplateBinding BorderBrush}"
+              BorderThickness="{TemplateBinding BorderThickness}"
+              CornerRadius="{DynamicResource ControlCornerRadius}"
+              MinWidth="{TemplateBinding MinWidth}"
+              MinHeight="{TemplateBinding MinHeight}">
+            </Border>
+
+            <Border
+              Padding="{TemplateBinding Padding}"
+              Margin="{TemplateBinding BorderThickness}">
+              <DockPanel>
+                <TextBlock Name="floatingWatermark"
+                           Foreground="{DynamicResource SystemAccentColor}"
+                           FontSize="{DynamicResource FontSizeSmall}"
+                           Text="{TemplateBinding Watermark}"
+                           DockPanel.Dock="Top">
+                  <TextBlock.IsVisible>
+                      <MultiBinding Converter="{x:Static BoolConverters.And}">
+                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
+                               Path="UseFloatingWatermark"/>
+                        <Binding RelativeSource="{RelativeSource TemplatedParent}"
+                               Path="Text"
+                               Converter="{x:Static StringConverters.IsNotNullOrEmpty}"/>
+                      </MultiBinding>
+                  </TextBlock.IsVisible>
+                </TextBlock>
+
+                <DataValidationErrors>
+                  <ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding (ScrollViewer.HorizontalScrollBarVisibility)}"
+                                VerticalScrollBarVisibility="{TemplateBinding (ScrollViewer.VerticalScrollBarVisibility)}">
+
+                    <Panel>
+                      <TextBlock Name="watermark"
                                Opacity="0.5"
                                Text="{TemplateBinding Watermark}"
                                TextAlignment="{TemplateBinding TextAlignment}"
                                TextWrapping="{TemplateBinding TextWrapping}"
                                IsVisible="{TemplateBinding Text, Converter={x:Static StringConverters.IsNullOrEmpty}}"/>
-                    <!-- TODO eliminate this margin... text layout issue? -->
-                    <TextPresenter Name="PART_TextPresenter"
+                      <!-- TODO eliminate this margin... text layout issue? -->
+                      <TextPresenter Name="PART_TextPresenter"
                                    Margin="0 1 0 0"
                                    Text="{TemplateBinding Text, Mode=TwoWay}"
                                    CaretIndex="{TemplateBinding CaretIndex}"
@@ -88,12 +80,13 @@
                                    SelectionBrush="{TemplateBinding SelectionBrush}"
                                    SelectionForegroundBrush="{TemplateBinding SelectionForegroundBrush}"
                                    CaretBrush="{TemplateBinding CaretBrush}"/>
-                  </Panel>
-                </ScrollViewer>
-              </DataValidationErrors>
-            </DockPanel>
-          </Border>
-        </Grid>
+                    </Panel>
+                  </ScrollViewer>
+                </DataValidationErrors>
+              </DockPanel>
+            </Border>
+          </Panel>
+        </DockPanel>
       </ControlTemplate>
     </Setter>
   </Style>

+ 1 - 1
src/Skia/Avalonia.Skia/FormattedTextImpl.cs

@@ -570,7 +570,7 @@ namespace Avalonia.Skia
                 
                 float constraint = -1;
 
-                if (_wrapping != TextWrapping.NoWrap)
+                if (_wrapping == TextWrapping.Wrap)
                 {
                     constraint = widthConstraint <= 0 ? MAX_LINE_WIDTH : widthConstraint;
                     if (constraint > MAX_LINE_WIDTH)