2016-08-04 6 views
1

TextBoxコントロールに問題があります。 ScrollViewerに注意してください。違いがあります。それはこの中で結果水平スクロールでのScrollView内のTextBoxサイズ設定

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

は、ここに私のXAMLで

Result with short text

期待のように見えますし、それが/消費するウィンドウのサイズが変更された場合にうまく縮小します。 これまでのところとても良いですが、テキストが少し長くなったらどうなりますか?

これが起こる:

Result with longer text

TextBoxは今、テキストに合わせて成長する内部です a)の水平方向のスクロールと b)は本当に醜いUIで結果を(可能にScrollViewがあるので、 )

(ScrollViewerを保持したままで)長いテキストでも最初のスクリーンショットからどのように見えるか分かっていますか?

私はTextBoxの最大幅を設定することを考えましたが、受け入れられないウィンドウでTextBoxが成長するのを防ぎました。

+1

あなたのコンテンツをスクロールしたくない場合は、 'ScrollViewer'を使う理由は何ですか? – Bart

+0

TextBox.WidthをScrollViewer.ActualWidthにバインドしてみてください – RTDev

答えて

1

私はあなたがTextBoxの幅を制限しない場合は、ScrollableWidthTextBoxの幅で育つ、そのScrollableWidthScrollViewerWidthまたはActualWidthを混乱かもしれないと思います。 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プロパティを設定してみてください、あなたは、ウィンドウのサイズを変更するようTextBoxMaxWidthプロパティは、あなたの問題を解決するだろう変更するには、この

<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

を試してみてください。しかし、私はそれを行うためのきれいな方法だとは思わない。

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; 
    } 
関連する問題