У меня есть приложение WPF, которое использует DataGrid
для отображения некоторых данных. При запуске программы появляется дополнительный столбец, как показано здесь: WPF DataGrid - Почему дополнительный столбец
Вот как это выглядит, когда я его дизайн в VS2010
Я выключил 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, который использует инъекции для отображения мнения как таковые (это регулярное окно):
<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 размера корень, как я хочу окно чтобы быть достаточно большим, чтобы разместить сетку и кнопку. Однако, когда я запускаю программу, я получаю дополнительный столбец в сетке данных, и это делает окно программы примерно вдвое большим (как шириной, так и высотой) в качестве EmployeeHoursView. Как я могу это кодировать так, чтобы окно моего приложения было достаточно большим для EmployeeHoursView без предоставления определенных значений? Что вызывает появление этого дополнительного столбца?
Но не то, что точки Auto Size, чтобы размер элементов (сетка данных в этом случае и главное окно по доверенности) только для того, что необходимо? Где еще будет действовать элемент калибровки? Если я изменил ширину последнего столбца на «*», тогда общий размер окна все тот же, и теперь у меня есть суперширокий столбец. – BrianKE
@BrianKE С сайта MSDN от Microsoft: 'Автоматическое определение размера означает, что элемент заполнит доступную ему ширину. Обратите внимание, однако, что определенные элементы управления часто предоставляют значения по умолчанию в своих стилях по умолчанию, которые будут отключать поведение автоматического размера, если оно специально не включено. 'Http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement .width.aspx – Rachel
Спасибо, что помогло мне указать в направлении SizeToContent на MainWindow. Установка этого параметра на «WidthAndHeight» теперь корректно определяет размер MainWindow на основе размера datagrid. – BrianKE