filtro - WPF DataGrid-Por qué la columna extra
wpf datagrid filter (2)
Bueno, ya que es un espacio no utilizado, otra manera será usar un ancho ponderado en lugar de uno fijo. También puede utilizar un enfoque híbrido en el que algunos son fijos y otros están ponderados, en ese caso, asegúrese de que uno esté ponderado (*) Por lo tanto, en su código será:
<DataGridTextColumn Header="PerceptionistID" Binding="{Binding PerceptionistID}" Width="4*" />
<DataGridTextColumn Header="Week Of" Binding="{Binding WeekOf, StringFormat={}{0:MM/dd/yyyy}}" Width="3*" />
<DataGridTextColumn Header="Regular Hours" Binding="{Binding WorkHours}" Width="4*" />
<DataGridTextColumn Header="PTO Hours" Binding="{Binding PTOHours}" Width="4*" />
<DataGridTextColumn Header="Holiday Hours" Binding="{Binding HolidayHours}" Width="4*" />
Tengo una aplicación WPF que usa DataGrid
para mostrar algunos datos. Cuando ejecuto el programa hay una columna adicional como se muestra aquí:
Esto es lo que parece cuando lo diseño en VS2010
He desactivado AutoGenerateColumns en la cuadrícula de datos y especifiqué las columnas individualmente como tales (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 un MainWindowView que usa la inyección para mostrar las vistas como tal (esta 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 especificado MainWindowView y EmployeeHoursView como Auto Size root, ya que quiero que la ventana sea lo suficientemente grande como para acomodar la cuadrícula 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 el doble de grande (ancho y alto) que la que debe tener EmployeeHoursView. ¿Cómo puedo codificar esto de modo que la ventana de mi aplicación sea lo suficientemente grande para EmployeeHoursView sin proporcionar valores específicos? ¿Qué está causando que aparezca esta columna adicional?
La "columna extra" es en realidad solo espacio no utilizado. Cada una de sus columnas define un valor de Ancho, por lo que una vez que se asignan, queda espacio.
Si desea deshacerse de ese espacio, haga que al menos una de sus columnas sea una columna *
para que se estire hasta llenar el espacio disponible.
Mi mejor estimación de por qué se ve normal en Visual Studio es probablemente porque tiene el ancho del diseñador configurado en algo más pequeño que el ancho del tiempo de ejecución. Si fuera más grande, verías lo mismo.
Si no desea que su control se extienda, entonces asegúrese de establecer su alineación horizontal / vertical (o la de su padre) en otra cosa que no sea Estirar
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<ItemsControl ItemsSource="{Binding ViewModels}" Margin="3" />
</StackPanel>