C# 在WPF中运行时调整文本框的大小

C# 在WPF中运行时调整文本框的大小,c#,.net,wpf,textbox,resize,C#,.net,Wpf,Textbox,Resize,我只是想知道如何让用户在运行时通过在WPF中拖动文本框控件的角来调整其大小。不太重要的是,是否使用相同的技术调整所有控件的大小 谢谢:)您应该尝试将文本框的对齐方式设置为拉伸,并将其放置在可以调整大小的容器中,例如带有GridSplitter的网格(或可调整大小的窗口)。这比创建一个自定义的可调整大小的文本框要容易得多,而且它可以更好地处理布局的其余部分 编辑: 下面是一个来自真实应用程序的示例: <Grid>... <GridSplitter Grid.Row="1" Gri

我只是想知道如何让用户在运行时通过在WPF中拖动文本框控件的角来调整其大小。不太重要的是,是否使用相同的技术调整所有控件的大小


谢谢:)

您应该尝试将文本框的对齐方式设置为拉伸,并将其放置在可以调整大小的容器中,例如带有GridSplitter的网格(或可调整大小的窗口)。这比创建一个自定义的可调整大小的文本框要容易得多,而且它可以更好地处理布局的其余部分

编辑: 下面是一个来自真实应用程序的示例:

<Grid>...
<GridSplitter Grid.Row="1" Grid.ColumnSpan="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="4" BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent"/>
<TextBox Grid.Row="2" Grid.Column="0" Margin="6,6,6,6" Name="RequestTextBox" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" Text="{Binding Request, Mode=TwoWay}"/>
<GridSplitter Grid.Row="2" Grid.ColumnSpan="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="4" BorderThickness="0,0,0,1" BorderBrush="Gray" Background="Transparent"/>
...</Grid>
。。。
...

tehMick的答案绝对正确:您应该创建一个容器来调整大小,而不是自定义文本框本身。如果它对您有效,
GridSplitter
是一个非常好的即时解决方案

我也遇到过同样的情况,但是GridSplitter不起作用,所以我创建了一个“ResizeByOrder”控件,该控件可以处理鼠标拖动其四个角以在二维中调整大小,或者处理鼠标拖动边中间以在一维中调整大小。这实际上是非常简单的代码:只需处理MouseDown,设置一个局部变量,给出MouseDown的位置和拖动的边/角,然后在MouseMove上更新大小

我的定单是有标签的,这样我就可以在角落里只显示四个盒子,在侧面显示线条,或者我能想象的任何更复杂的东西

另外,请注意,无论您使用的是网格和网格拆分器,还是ResizeBorder或其他任何工具,您都可以选择在控件周围放置调整大小功能,如下所示:

<my:ResizeBorder ...>
  <TextBox ... />
</my:ResizeBorder>

或者通过更新文本框本身的ControlTemplate:

<ControlTemplate x:Key="ResizableTextBox" TargetType="{x:Type TextBox}">
  <my:ResizeBorder>
    ...
  </my:ResizeBorder>
</ControlTemplate>

...

<TextBox Template="{StaticResource ResizableTextBoxTemplate}" ... />

...
...

后一种方法的优点是,您可以使用样式或附加属性来调整文本框的大小,并且可以轻松地在代码中动态更改文本框的大小。

Duplicate:这不应标记为重复,因为该链接上的任何内容都不起作用。这可能不适合您的情况,但这应该是你考虑的第一件事。有趣的是,我现在正在尝试!1.