奇怪的WPF Grid行为受到TextBox文本的影响

3
我不明白为什么我的文本框内容会影响我的网格列宽。我已经设置了一个网格,其中有三列,宽度定义为50、*、50,如下所示: Grid Setup 现在,在使用过程中,中间列将随着TextBox中的文本变化而增长/缩小,如下面的两个示例所示。实际的文本框大小没有改变,因此我无法理解为什么网格正在改变。网格位于UserControl内的Border中。UserControl用作ListBox中的DataTemplate。 Initial Grid with No input in the 1st TextBox Grid Layout with long string in 1st TextBox 编辑: 我发现这个问题与UserControl在ListBox中有关,请参见下面的示例图像(在红色圆圈中的ListBox中的UserControl与放置在表单上的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>


我认为你需要更多的代码来帮助人们诊断问题。我刚刚将你的代码复制到一个新的WPF项目中,它按预期工作,而不是调整最后一列的宽度。 - ndonohoe
问题可能出现在周围的容器或全局样式中。您能像@bonyjoe建议的那样发一下额外的代码吗? - Bruno V
1个回答

1

好的,我想通了,Bruno V让我想到了这一定与ListBox有关。我需要将以下内容添加到我的ListBox中:

ScrollViewer.HorizontalScrollBarVisibility="Disabled"

不确定为什么它起作用了,但它确实起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接