Tôi có một ứng dụng WPF sử dụng DataGrid
để hiển thị một số dữ liệu. Khi tôi chạy chương trình có một cột bổ sung như ở đây: WPF DataGrid - Tại sao cột phụ
Đây là những gì nó trông giống như khi tôi thiết kế nó trong VS2010
Tôi đã tắt AutoGenerateColumns trên lưới dữ liệu và xác định các cột cá nhân như vậy (đây là một điều khiển người dùng):
<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>
Tôi cũng có một MainWindowView có sử dụng tiêm để hiển thị các quan điểm như vậy (đây là một cửa sổ thông thường):
<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>
Trong thiết kế tôi đã xác định cả hai MainWindowView và EmployeeHoursView như Auto Kích gốc như tôi muốn cửa sổ đủ lớn để chứa lưới và nút. Tuy nhiên, khi tôi chạy chương trình, tôi nhận được một cột bổ sung trong lưới dữ liệu và nó làm cho cửa sổ chương trình lớn hơn gấp đôi (cả chiều rộng và chiều cao) khi EmployeeHoursView cần. Làm thế nào tôi có thể mã này như vậy mà cửa sổ ứng dụng của tôi là chỉ đủ lớn cho EmployeeHoursView mà không cung cấp các giá trị cụ thể? Điều gì khiến cột bổ sung này xuất hiện?
Nhưng không phải là quan điểm Kích thước tự động, để kích thước các yếu tố (lưới dữ liệu trong trường hợp này và cửa sổ chính của proxy) chỉ là những gì là cần thiết? Một yếu tố kích thước nào khác sẽ được đưa vào chơi? Nếu tôi thay đổi chiều rộng của cột cuối thành "*" thì kích thước cửa sổ chung vẫn như cũ và bây giờ tôi có một cột siêu rộng. – BrianKE
@BrianKE Từ trang MSDN của Microsoft: 'Hành vi định cỡ tự động ngụ ý rằng phần tử sẽ lấp đầy chiều rộng có sẵn cho nó. Tuy nhiên, lưu ý rằng các điều khiển cụ thể thường cung cấp các giá trị mặc định theo kiểu mặc định của chúng sẽ vô hiệu hóa hành vi định cỡ tự động trừ khi nó được bật lại cụ thể.' http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement .width.aspx – Rachel
Cảm ơn, điều đó đã giúp tôi hướng theo SizeToContent trên MainWindow. Đặt giá trị này thành "WidthAndHeight" hiện đã kích thước chính xác kích thước của MainWindow dựa trên kích thước của DataGrid. – BrianKE