0

(GridSplitterを使用して)大きなパネルにTextBoxコントロールを配置しようとしています。

私が最初に経験した問題は、入力されるテキストが長くなると、TextBoxが自動的にサイズ変更されることでした。このサイトで、TextBoxを境界線でラップし、TextBoxの幅を境界線の幅に設定する解決策を見つけました(以下のXAMLに表示されています)。これは機能しているようです。それが私が助けを求めている問題の原因である場合に備えて、私はこれに言及します。

現在の問題は、TextBoxのサイズが大きくなりますが、パネルのサイズが小さくなるとすぐにScrollViewerが起動することです。私が見たいのは、TextBoxが最小幅にサイズダウンされたとき(以前ではない)にScrollViewerが起動することです。

私が現在使用している完全なXAMLは以下のとおりです。

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="NonExpandingTextBoxDemo.MainWindow" Height="350" Title="MainWindow" Width="525">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <ScrollViewer Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto">
      <Border HorizontalAlignment="Stretch" Margin="20, 20, 20, 20" MinWidth="100" VerticalAlignment="Center">
        <TextBox Width="{Binding Mode=OneWay, Path=ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type Border}, Mode=FindAncestor}}" />
      </Border>
    </ScrollViewer>
    <GridSplitter Grid.Column="1" Grid.Row="0" ResizeBehavior="PreviousAndNext" VerticalAlignment="Stretch" Width="3" />
    <TextBlock Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" Text="Right Panel" VerticalAlignment="Center" />
  </Grid>
</Window>

問題は、私が何を見逃しているのかということです。私はいくつかのことを試しましたが、何もうまくいかないようです。

この問題に関するガイダンスを事前に感謝します。

4

2 に答える 2

0

問題は ScrollViewer です。ScrollViewer は、子が小さくなったときにサイズを変更するように構成されておらず、大きくなっただけです。したがって、子要素は拡大しますが縮小はしません。

ScrollViewer が必要な理由

<Window x:Class="TextWrappingAtParentSize.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="FirstCol" MinWidth="100" Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
            <Border VerticalAlignment="Center" Margin="20, 20, 20, 20" >
                <TextBox Width="{Binding Mode=OneWay, Path=ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type Border}, Mode=FindAncestor}}" TextWrapping="Wrap"/>
            </Border>
        <GridSplitter Grid.Column="1" Grid.Row="0" ResizeBehavior="PreviousAndCurrent" VerticalAlignment="Stretch" Width="3" />
        <TextBlock Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" Text="Right Panel" VerticalAlignment="Center" />
    </Grid>
</Window>

列に MinWidth を設定すると、スクロールする必要がなくなる場合があります。ただし、これは単なるサンプルであり、他にスクロールする必要があるかもしれません。

スクロール ソリューションを探し続けることができます。お知らせ下さい。

于 2012-11-02T17:38:21.660 に答える