受TextBox文本影响的奇数WPF网格行为

时间:2014-12-16 17:03:01

标签: wpf

我无法弄清楚为什么TextBox的内容会影响我的网格列宽度。我设置了一个有3列的网格,宽度定义为50,*,50,如下所示

Grid Setup

现在,在使用时,中心列会随着TextBox中文本的变化而增大/缩小,请参阅下面的2个示例。实际的TextBox没有改变大小,所以我无法理解为什么世界上网格正在发生变化。 Grid位于UserControl内的Border内部。 UserControl用作ListBox中的DataTemplate。

Initial Grid with No input in the 1st TextBox

Grid Layout with long string in 1st TextBox

编辑:我发现此问题与ListBox中的UserControl有关,请参阅下面的示例图片(ListBox中的UserControl(红色圈出)与Form上的UserControl(蓝色圈)。当UserControl直接放在表单上时,网格的行为与预期一致。表格的代码如下所示。

UserControl in ListBox vs. UserControl Placed on Form

UserControl XAML:

<Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="50"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="50"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Text="Name:" Margin="2" />
        <TextBox Grid.Column="1" Margin="2" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Grid.ColumnSpan="2" />

        <TextBlock Text="Shift:" Grid.Row="1" Margin="2"  />
        <TextBox  Grid.Column="1" Grid.Row="1" Margin="2" Text="{Binding TimeShift, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}" HorizontalContentAlignment="Right" />
        <TextBlock Text="s" Grid.Row="1" Grid.Column="2" Margin="2" />
    </Grid>

窗口/表格XAML:

<Window x:Class="CrashSimOffice.FileImport"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CrashSimOffice"
    Title="File Import" Height="350" Width="450" Background="White" Icon="/CrashSimOffice;component/Images/16/page-white-save.png">
<Grid>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="75"/>
        <ColumnDefinition Width="75"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="75"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Button Content="Add" Margin="2" Command="{Binding AddFileCommand}" />
    <Button Content="Remove" Grid.Column="1" Margin="2" Command="{Binding RemoveFileCommand}" />

    <ListBox HorizontalContentAlignment="Stretch" Grid.ColumnSpan="4" Margin="2" Grid.Row="1" ItemsSource="{Binding Files}" SelectedItem="{Binding CurrentFile}"  ScrollViewer.CanContentScroll="False" Background="WhiteSmoke">
        <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type local:FileViewModel}">
                <local:FileView DataContext="{Binding}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <Button Content="Done" Grid.Column="3" Margin="2" Grid.Row="2" Click="Button_Click" />


    <local:FileView Grid.Row="3" Grid.ColumnSpan="4" />
</Grid>

1 个答案:

答案 0 :(得分:0)

好的,我明白了,Bruno V你让我觉得它必须与ListBox有关。我需要将它添加到我的ListBox:

ScrollViewer.Horizo​​ntalScrollBarVisibility =&#34;禁用&#34;

不确定为什么会有效,但确实如此。