wpf - xaml scrollviewer




WPF 텍스트 상자 및 스크롤 동작 (2)

문제는 부모 요소가 필요하다고 생각하는만큼 TextBox에 TextBox를 제공하고 더 많은 텍스트가있는 경우 초기 자동 크기로 유지하는 대신 확장됩니다.

한 가지 해결책은 또 다른 자동 크기 조정 요소를 만들고 TextBox.Width를 바인딩하는 것입니다.

<DockPanel>
    <TreeView Width="150" DockPanel.Dock="Left"/>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock Margin="5" VerticalAlignment="Center" Text="Name"/>
            <Border x:Name="b" Grid.Column="1" Margin="5"/>
            <TextBox Width="{Binding ActualWidth, ElementName=b}"
                     MinWidth="200"
                     Grid.Column="1"
                     Margin="5"
                     VerticalAlignment="Center"
                     Text="Some Name"/>
        </Grid>
    </ScrollViewer>
</DockPanel>

자동 크기 조정 요소 (테두리)의 Margin 속성을 설정합니다. 이것은 설정되지 않으면 루프가 생기기 때문에 중요합니다.

  1. 테두리 너비를 자동으로 조정합니다.
  2. TextBox 폭이 Border.ActualWidth로 크기 조정됩니다.
  3. 눈금 열 너비는 TextBox 폭 + TextBox 여백으로 조정됩니다.
  4. 테두리 너비가 다시 눈금 열 너비로 자동 조절됩니다.

Margin을 TextBox와 동일하게 설정하면 TextBox 크기를 조정해도 Grid 크기에 영향을주지 않습니다.

나는 문제가있다. UI에서 텍스트 상자가 잘리지 않거나 0으로 축소되는 것을 방지하기 위해 ScrollViewer의 컨트롤로 표를 호스팅해야합니다. 또한 사용자가 창 너비를 변경할 때 텍스트 상자를 확장해야합니다. Window의 내용을 다음 코드로 설정하고 있습니다.

<DockPanel>
    <TreeView DockPanel.Dock="Left" Width="150"/>
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Name" 
                       Margin="5" 
                       VerticalAlignment="Center"/>
            <TextBox Grid.Column="1"
                     Text="Some Name"
                     Margin="5"
                     VerticalAlignment="Center"
                     MinWidth="200"/>
        </Grid>
    </ScrollViewer>
</DockPanel>

모두 잘 작동하지만 사용자가 TextBox에 매우 긴 텍스트를 입력하면 확장되고 수평 스크롤이 나타납니다. TextBox 최대 너비를 제한하고 사용자가 창 크기를 변경할 때만 확장 할 수있는 쉬운 방법이 있습니까?


아니요 - 이것은 wpf의 잘 알려진 문제이며 다음 릴리스에서 수정 될 것으로 예상됩니다. 감사





panels