我上週制定的大小會啓動了「廣」 MainWaindow(大於1400個像素)新WPF應用程序B主窗口與先前開發的應用程序A主窗口
我在目前的時間啓動一個應用程序A
開發一個新的應用程序B(它尋找運行Excel實例)
所以我有一個視圖,其中包含一個DataGrid,其Width
屬性Auto
(設計器圖片如下)。一切都很好
然後我把它插入到主窗口(這裏設計圖片)
這是不是正是我的預期,但我還是不得不在SO一些研究這樣的問題wpf-datagrid-why-the-extra-column(答案告訴它不是一個額外的列它是一個補充寬度...)
然後我運行這個應用程序B
。奇蹟:我得到了更廣闊的窗戶。
確切的問題,我想在這裏揭露的是:
- 爲什麼我會在應用
B
相同的寬度爲上週的申請A
的一個運行時?
我不相信巧合(我也沒有複製/粘貼2個應用程序之間)。它在哪裏支持? 我已閱讀關於樣式的文章(默認樣式,專用於不適用於繼承MainWindow的窗口樣式...)
閱讀關於WPF的任何(實際)基本原理也值得歡迎!
編輯:添加代碼(我第一次沒有想顯示的代碼專注於問題,因爲有「千」的地方,你可以設置一個寬度...生效與否。)
<UserControl ...
d:DataContext="{d:DesignInstance {x:Type vm_nmspc:MainWindowVm}, IsDesignTimeCreatable=True}">
<UserControl.Resources>
<Style TargetType="DataGridRow">
<Setter Property="Width" Value="Auto"/>
...
</Style>
</UserControl.Resources>
<Grid>
<DataGrid ItemsSource="{Binding OpenExcelColl}" AutoGenerateColumns="False" AlternationCount="{Binding OpenExcelColl.Count}"
VirtualizingPanel.IsVirtualizing="False" CanUserAddRows="False" SelectedItem="{Binding SelectedExcelObject}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTextColumn Header="Path" Binding="{Binding CompletePath}" IsReadOnly="True"/>
<DataGridTextColumn Header="Type" Binding="{Binding ExtType}" IsReadOnly="True"/>
</DataGrid.Columns>
...
</DataGrid>
</Grid>
</UserControl>
而且MainWindow.xaml(注意,沒有寬度已獲得,希望主窗口會自動適應。Width="Auto"
沒有工作)
<Window ...
DataContext="{DynamicResource ResourceKey=MyVM}"
mc:Ignorable="d"
Title="MainWindow" Height="350"
SizeToContent="Width"> <<------- Line added to "workaround/solve" the problem
<Window.Resources>
<vm_nmspc:MainWindowVm x:Key="MyVM"/>
</Window.Resources>
<Grid>
<views:AllExcelObjDataGrid DataContext="{Binding}"/>
</Grid>
</Window>
後SizeToContent =「寬度」
我想我找到了答案的開始[爲什麼是我的wpf窗口大小默認將是巨大](http://stackoverflow.com/questions/3146106/),至少通過將* SizeToContent =「Width」*添加到Window屬性。 – NGI
發佈一些Xaml代碼,可能發生這種情況是因爲您將寬度設置爲auto,因此它將佔用從其父級獲得的任何空間。在你的Datagrid中設置'ColumnWidth =「*」'來平分你的列之間的剩餘空間。 – SilentStorm
你的問題到底是什麼?預期的結果是什麼? – mm8