Browse Source

Merge pull request #4251 from Gillibald/fixes/FluentTextBox

Fix text wrapping for fluent TextBox
pull/4331/head
danwalmsley 6 years ago
committed by GitHub
parent
commit
74a0940368
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Avalonia.Controls/TextBox.cs
  2. 105
      src/Avalonia.Themes.Fluent/TextBox.xaml
  3. 2
      src/Skia/Avalonia.Skia/FormattedTextImpl.cs

2
src/Avalonia.Controls/TextBox.cs

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

105
src/Avalonia.Themes.Fluent/TextBox.xaml

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

2
src/Skia/Avalonia.Skia/FormattedTextImpl.cs

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

Loading…
Cancel
Save