gpt4 book ai didi

WPF 文本框和滚动行为

转载 作者:行者123 更新时间:2023-12-04 01:21:19 28 4
gpt4 key购买 nike

我有个问题。
我需要在 ScrollViewer 中使用控件托管网格,以防止文本框在 UI 处被截断或折叠为零。我还希望在用户更改窗口宽度时扩展文本框的 with。
我将 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 最大宽度并仅在用户更改窗口大小时才允许扩展它。

最佳答案

问题在于,父元素为 TextBox 提供了它认为需要的尽可能多的空间,并且当存在更多文本时,它会扩展而不是保持初始自动大小。

这里的一个解决方案是制作另一个自动调整大小的元素并将 TextBox.Width 绑定(bind)到它:

<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 属性。 这很重要,因为如果没有设置,就会出现循环:
  • 边框宽度自动调整为网格列宽
  • 文本框宽度调整为 Border.ActualWidth
  • 网格列宽调整为文本框宽度 + 文本框边距
  • 边框宽度再次自动调整为网格列宽

  • 通过将 Margin 设置为与 TextBox 相同,TextBox 的大小调整不会影响 Grid 的大小。

    关于WPF 文本框和滚动行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/386039/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com