【发布时间】:2017-02-28 10:03:14
【问题描述】:
我在 XAML 中有一个数据网格,它有 4 个单独的列,所有列的宽度都是 *。使用控件在 Visual Studio 中一切看起来都很好,在设计视图中一切看起来都很好。
但是,当我运行我的程序时,我的所有列都缩小到只有 5 个左右像素的宽度,并且没有任何内容,即使单击并拖动列的边框来调整它们的大小也会改变它们的宽度。有时,当我运行我的程序时,我什至会看到列从正常宽度开始,然后在几秒钟内一次缩小到一个像素的最小尺寸。
经过一番调查,问题似乎与使用* 作为列的宽度有关,就好像我将所有列更改为Auto 或固定宽度一样,该列中的所有内容都可以正常工作原因。
下面是我遇到问题的 XAML 代码。
<GroupBox Header="header text" Margin="4"
Visibility="{Binding BindTarget, Converter={StaticResource BooleanToVisibilityConverter}}">
<DataGrid Margin="4" ItemsSource="{Binding}" DataContext="{Binding DataContextTarget}"
AutoGenerateColumns="False" MaxHeight="250" CanUserDeleteRows="False"
EnableRowVirtualization="False" CanUserSortColumns="True" CanUserResizeColumns="True">
<DataGrid.Columns>
<DataGridTemplateColumn Width="0.8*">
<DataGridTemplateColumn.Header>
<TextBlock Text="ResourceHeader1" TextWrapping="Wrap" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox
IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" IsReadOnly="True">
<DataGridTemplateColumn.Header>
<TextBlock Text="Name" TextWrapping="Wrap" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FieldName1}" IsEnabled="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" IsReadOnly="True">
<DataGridTemplateColumn.Header>
<TextBlock Text="Model" TextWrapping="Wrap" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FieldName2}" IsEnabled="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*" IsReadOnly="True">
<DataGridTemplateColumn.Header>
<TextBlock Text="Manufacturer" TextWrapping="Wrap" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FieldName3}" IsEnabled="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
正如您在 XAML 中看到的,我什至允许用户手动调整数据网格中的列宽,但这并没有什么区别,如果我将列的宽度设置为 *,它们仍然拒绝调整大小.
任何想法是什么导致了这个奇怪的问题?
【问题讨论】:
-
我将它复制到一个新的 WPF 窗口中,并且列间距没有任何问题。
-
我已经尝试过这样做,它可能在 XAML 预览中显示得很好,但是我将我的数据网格 XAML 粘贴到的任何新控件/窗口都有相同的问题,即使它是唯一的事情在控制中。我尝试将我的数据网格复制并粘贴到我项目中的其他现有窗口中,同样的事情也发生在那里。我真的很想弄清楚这件事。