2017-09-13 21 views
0

我有一個ListView控件在我的WPF應用程序WPF GridView的調整幅度可用空間大小

<ListView Name="generatorsList" ItemsSource="{Binding GeneratorsList}" SelectionMode="Single"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding Name}"> 
       <GridViewColumn.Header> 
        <GridViewColumnHeader Tag="Name">Name</GridViewColumnHeader> 
       </GridViewColumn.Header> 
      </GridViewColumn> 
      <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" /> 
      <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" /> 
      <GridViewColumn Header="Actions" Width="60"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         //buttons 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

它看起來像這樣 current with big window

的情況是,當窗口比列表本身較小(爲例如,如果顯示的例子中的描述非常長)滾動條形成並且GridView保持不變,因此操作按鈕在屏幕上不可見(用戶必須拖動滾動條)。 current with small window

我想在初始化爲基於當前窗口寬度的最大列寬,所以當ListView中被示出爲用戶的Actions柱將總是出現。這樣 expected result

然後,如果用戶願意,他可以手動調整任何列(所以沒有實際的「maxwidth」時,只是width)。 我試圖與*工作,但GridView不知道它的孩子,所以*不在這裏工作,auto不是一個好的選擇,因爲我不能設置每列的最大所需的寬度,恆定的寬度值是不需要的,因爲它必須取決於可變的窗口大小(可用空間大小)。我認爲我需要在代碼中使用某種事件,但我不知道應該如何處理它。

+1

您始終可以將Actions放置在前面:這樣,無論窗口或列的寬度如何,它們始終位於相同的位置。 – cguedel

+0

它會工作,但這是一個騙局。列表與前面的操作按鈕看起來不太一樣。還有,如果'Name'字段太長? – Erexo

回答

1

嘗試這樣:

<DataGrid Name="generatorsList" 
      ItemsSource="{Binding GeneratorsList}" 
      AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" 
          Binding="{Binding Name}" 
          Width="*"/> 

     <DataGridTextColumn Header="Type" 
          Binding="{Binding Type}"/> 

     <DataGridTextColumn Header="Description" 
          Binding="{Binding Description}" 
          Width="2*"/> 

     <DataGridTemplateColumn Header="Actions" 
           Width="auto" 
           MinWidth="60"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <!--buttons--> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

我已經改變了你的ListView到DataGrid的(更好地爲這種情況下,在我看來)。

+0

它調整自己的預期,但它是這樣的:https://imgur.com/a/G9SWa 似乎'DataGrid'添加所有源項目屬性本身,任何想法? – Erexo

+0

對不起,忘了這個。 'DataGrid'自動生成基於'ItemsSource'的列。只需在'DataGrid'上設置'AutoGenerateColumns ='False'',你就會好起來的。 (我也編輯了我的答案,包含此修復) –

+1

現在它工作正常,謝謝!也爲我自己的需要,我已經將這些屬性添加到DataGrid的'Background =「Transparent」GridLinesVisibility =「None」CanUserResizeRows =「False」 CanUserReorderColumns =「False」RowHeaderWidth =「0」IsReadOnly =「True」SelectionMode =「Single 「' – Erexo