Ho un'app WPF che utilizza DataGrid
per visualizzare alcuni dati. Quando eseguo il programma v'è una colonna aggiuntiva, come mostrato qui: WPF DataGrid - Perché la colonna in più
Ecco quello che sembra quando progetto in VS2010
Ho spento AutoGenerateColumns sulla griglia di dati e specificate le colonne singolarmente come tale (questo è un controllo utente):
<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>
Ho anche un MainWindowView che utilizza l'iniezione per visualizzare i punti di vista in quanto tali (questa è una finestra normale):
<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>
nella finestra di progettazione Ho specificato sia MainWindowView e EmployeeHoursView come Auto Root Formato come voglio la finestra per essere abbastanza grande da ospitare la griglia e il pulsante. Tuttavia, quando eseguo il programma ottengo una colonna aggiuntiva nella griglia di dati e rende la finestra del programma circa due volte più grande (sia la larghezza che l'altezza) come deve essere EmployeeHoursView. Come posso codificare questo in modo tale che la finestra dell'applicazione sia sufficientemente grande per EmployeeHoursView senza fornire valori specifici? Che cosa sta causando l'apparizione di questa colonna aggiuntiva?
Ma non è che il punto di Dimensione automatica, per dimensionare gli elementi (la griglia di dati in questo caso e la finestra principale per proxy) solo per ciò che è necessario? In quale altro posto entrerebbe in gioco un elemento di dimensionamento? Se cambio la larghezza dell'ultima colonna in "*", la dimensione generale della finestra è sempre la stessa e ora ho una colonna super ampia. – BrianKE
@BrianKE Dal sito MSDN di Microsoft: 'Il comportamento di dimensionamento automatico implica che l'elemento riempirà la larghezza disponibile. Si noti tuttavia che controlli specifici forniscono frequentemente valori predefiniti nei loro stili predefiniti che disabiliteranno il comportamento del dimensionamento automatico a meno che non venga riattivato specificamente. Http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement .width.aspx – Rachel
Grazie, questo mi ha aiutato a indirizzarmi verso SizeToContent sulla Finestra Principale. Impostando questo su "WidthAndHeight" ora dimensiona correttamente la finestra principale in base alla dimensione del datagrid. – BrianKE