Tengo una aplicación WPF que usa DataGrid
para mostrar algunos datos. Cuando ejecuto el programa hay una columna adicional, como se muestra aquí: WPF DataGrid: por qué la columna adicional
Aquí es lo que parece cuando diseño en VS2010
He apagado AutoGenerateColumns en la cuadrícula de datos y especifica las columnas individualmente como tal (esto es un control de usuario):
<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>
también tengo una MainWindowView que utiliza la inyección para mostrar los puntos de vista como tal (esto es una ventana normal):
<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>
En el diseñador He especificados tanto MainWindowView y EmployeeHoursView que Auto raíz tamaño que quiero la ventana para ser lo suficientemente grande como para acomodar la rejilla y el botón. Sin embargo, cuando ejecuto el programa, obtengo una columna adicional en la cuadrícula de datos y hace que la ventana del programa sea aproximadamente el doble de grande (tanto en ancho como en alto) que debe ser EmployeeHoursView. ¿Cómo puedo codificar esto para que la ventana de mi aplicación sea suficientemente grande para EmployeeHoursView sin proporcionar valores específicos? ¿Qué está causando que aparezca esta columna adicional?
Pero no es que el punto de Tamaño automático, para ajustar el tamaño de los elementos (la cuadrícula de datos en este caso y la ventana principal por proxy) a lo que se necesita? ¿Dónde más podría entrar en juego un elemento de tamaño? Si cambio el ancho de la última columna a "*", el tamaño general de la ventana sigue siendo el mismo y ahora tengo una columna muy amplia. – BrianKE
@BrianKE Desde el sitio MSDN de Microsoft: 'El comportamiento del tamaño automático implica que el elemento llenará el ancho disponible para él. Sin embargo, tenga en cuenta que los controles específicos suelen proporcionar valores predeterminados en sus estilos predeterminados que deshabilitarán el comportamiento del tamaño automático a menos que se vuelva a habilitar específicamente. Http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement .width.aspx – Rachel
Gracias, eso me ayudó a orientarme hacia SizeToContent en MainWindow. Establecer esto en "WidthAndHeight" ahora dimensiona correctamente la ventana principal en función del tamaño de la cuadrícula de datos. – BrianKE