gpt4 book ai didi

WPF DataGrid - 为什么额外的列

转载 作者:行者123 更新时间:2023-12-03 10:13:24 25 4
gpt4 key购买 nike

我有一个使用 DataGrid 的 WPF 应用程序显示一些数据。当我运行程序时,还有一个附加列,如下所示:
enter image description here

这是我在 VS2010 中设计时的样子 enter image description here

我已经关闭了数据网格上的 AutoGenerateColumns 并单独指定了列(这是一个用户控件):

<Grid Margin="10,10,10,10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>


<DataGrid x:Name="EmployeeHours" AutoGenerateColumns="False" ItemsSource="{Binding EmployeeHoursLastWeek}" Width="Auto">
<DataGrid.Columns>
<DataGridTextColumn Header="PerceptionistID" Binding="{Binding PerceptionistID}" Width="100" />
<DataGridTextColumn Header="Week Of" Binding="{Binding WeekOf, StringFormat={}{0:MM/dd/yyyy}}" Width="75" />
<DataGridTextColumn Header="Regular Hours" Binding="{Binding WorkHours}" Width="100" />
<DataGridTextColumn Header="PTO Hours" Binding="{Binding PTOHours}" Width="100" />
<DataGridTextColumn Header="Holiday Hours" Binding="{Binding HolidayHours}" Width="100" />
</DataGrid.Columns>
</DataGrid>

<Button x:Name="ImportHoursButton" Content="Import Hours"
Command="{Binding ImportHoursCommand}"
Height="25" Width="100" Margin="10"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
Grid.Row="1" />
</Grid>

我还有一个 MainWindowView 使用注入(inject)来显示 View (这是一个常规窗口):
<Window x:Class="Sidekick.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:Sidekick.ViewModel"
xmlns:vw="clr-namespace:Sidekick.View"
Title="Sidekick">

<!-- Typically done in a resources dictionary -->
<Window.Resources>
<DataTemplate DataType="{x:Type vm:EmployeeHoursViewModel}">
<vw:EmployeeHoursView />
</DataTemplate>
</Window.Resources>

<StackPanel>
<ItemsControl ItemsSource="{Binding ViewModels}" Margin="3" />
</StackPanel>

</Window>

在设计器中,我将 MainWindowView 和 EmployeeHoursView 都指定为 Auto Size root,因为我希望窗口足够大以容纳网格和按钮。但是,当我运行程序时,我在数据网格中获得了一个额外的列,它使程序窗口(宽度和高度)大约是 EmployeeHoursView 所需的两倍。我如何编写代码以使我的应用程序窗口足够大以容纳 EmployeeHoursView 而无需提供特定值?是什么导致此附加列出现?

最佳答案

“额外的列”实际上只是未使用的空间。您的每一列都定义了一个宽度值,因此一旦它们被分配,就会留下空间。

如果您想摆脱该空间,请至少将您的一列设为 *列,因此它会拉伸(stretch)以填充可用空间。

关于为什么它在 Visual Studio 中看起来正常,我最好的猜测可能是因为您将设计器宽度设置为小于运行时宽度。如果它更大,你会看到同样的东西。

如果您不希望控件拉伸(stretch),请确保将其(或其父级)的水平/垂直对齐设置为 Stretch 以外的其他内容

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<ItemsControl ItemsSource="{Binding ViewModels}" Margin="3" />
</StackPanel>

关于WPF DataGrid - 为什么额外的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com