2016-08-04 68 views
1

我與TextBox控制的問題。 請注意ScrollViewer,因爲這有所不同。文本框內滾動型施膠用水平滾動

這是我的XAML:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ScrollViewer HorizontalScrollMode="Auto" HorizontalScrollBarVisibility="Auto"> 
     <TextBox HorizontalAlignment="Stretch" 
       VerticalAlignment="Center" 
       Margin="20" 
       Text = "A short text"> 
     </TextBox> 
    </ScrollViewer> 
</Grid> 

它導致這樣的:

Result with short text

它看起來像預期和消費它/如果窗口大小很好收縮。 到目前爲止這麼好,但是如果文本有點長,會發生什麼?

出現這種情況:

Result with longer text

TextBox現在長到適合文本內是 一)因爲有一個ScrollView,允許水平滾動和 b)導致一個非常醜陋的UI(因爲右邊距不可見,但滾動條是,等等。)

有誰知道我怎樣才能實現從第一個屏幕截圖,即使有更長的文本(同時保持ScrollViewer)?

我想過爲TextBox設置了最大寬度,但是它阻止了TextBox與不可接受的窗口一起增長。

+1

如果你不想讓你的內容滾動,使用ScrollViewer的原因是什麼? – Bart

+0

嘗試綁定TextBox.Width ScrollViewer.ActualWidth – RTDev

回答

1

我想你可能會感到困惑的ScrollViewerWidthActualWidthScrollableWidth,如果不限制TextBox寬度,ScrollableWidth長大後會與TextBox寬度。限制TextBox的寬度不會解決您的問題。

...右邊距是不可見的,但滾動條..

我猜你需要的是這樣的:

enter image description here

XAML代碼:

<ScrollViewer Margin="20" BorderBrush="Blue" BorderThickness="2" 
       HorizontalScrollMode="Auto" HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Hidden" VerticalScrollMode="Disabled" Height="45"> 
    <TextBox x:Name="tb" HorizontalAlignment="Stretch" VerticalAlignment="Center" 
      BorderThickness="0"/> 
</ScrollViewer> 

您可以自定義ScrollViewer使其行爲像一個TextBox,例如當獲得焦點時,將顯示Border或其他人。

+0

我認爲這是一個非常好的想法 – Felix

0

嘗試設置您的ScrollViewer,而不是保證金Padding屬性,嘗試這種

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">"> 
     <ScrollViewer HorizontalScrollBarVisibility="Auto" Padding="20,0"> 
      <TextBox HorizontalAlignment="Stretch" 
      VerticalAlignment="Center" 
      Margin="20" 
      Text = "A short text"> 
      </TextBox> 
     </ScrollViewer> 
    </Grid> 
1

更改TextBoxMaxWidth財產作爲調整窗口的大小會解決你的問題。雖然,我不認爲這是一個乾淨的方式來做到這一點。

int margin = 40; // Set your margin 

    public MainPage() 
    { 
     this.InitializeComponent(); 
     InputTextBox.MaxWidth = Window.Current.Bounds.Width - margin; 
     Window.Current.SizeChanged += Current_SizeChanged; 
    } 

    private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) 
    { 
     var size = e.Size; 
     InputTextBox.MaxWidth = size.Width - margin; 
    }