如何阻止多行文本框移动GridSplitter?

时间:2012-03-06 00:48:10

标签: .net wpf

要重现此问题: 垃圾邮件(例如),直到您开始点击正确的gridplitter区域。 gridsplitter移动超过右侧最小宽度限制。

预期行为:在文本框中输入(键入/粘贴)时超出宽度限制不会移动网格切割器,但会立即激活滚动条。

条件

  • TextBox必须是水平和垂直可滚动的
  • TextBox和ScrollViewer必须保持动态大小 - 没有maxwidth限制。这是因为在真实的应用程序中,用户可以调整应用程序的大小,从而调整文本框的大小。

代码:

<Window x:Class="WpfApplication1.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 Width="10000*" MinWidth="25"/>
        <ColumnDefinition Width="8" />
        <ColumnDefinition Width="*" MinWidth="25" />
    </Grid.ColumnDefinitions>
    <ScrollViewer HorizontalScrollBarVisibility="Visible">
        <TextBox AcceptsReturn="True" AcceptsTab="True" TextWrapping="Wrap" />
    </ScrollViewer>
    <GridSplitter Background="Black"
                  BorderBrush="White"
                  BorderThickness="1,0,0,0"
                  ResizeDirection="Columns"
                  HorizontalAlignment="Stretch"
                  VerticalAlignment="Stretch" Grid.Column="1" />
    <Grid Background="Red" Grid.Column="2" />
</Grid>

1 个答案:

答案 0 :(得分:1)

造成问题

<ColumnDefinition Width="10000*" MinWidth="25"/>

改为使用列定义的百分比值:

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width=".75*" MinWidth="25"/>
        <ColumnDefinition Width="8" />
        <ColumnDefinition Width=".25*" MinWidth="25" />
    </Grid.ColumnDefinitions>