2017-09-13 20 views
0

に幅を調整するために(ウィンドウがリスト自体よりも小さい場合がある。この current with big windowWPF GridViewのは、私は私のWPFアプリケーションでListViewコントロールを持っている利用可能なスペースのサイズ

、のように見える

<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> 

スクロールバーが形成され、GridViewは同じままなので、アクションボタンは画面に表示されません(ユーザーはスクロールバーをドラッグする必要があります)。 current with small window

Iは、リストビューがユーザーに表示されたときActions列が常に表示されるように、初期化時に、現在のウィンドウ幅に基づいて、最大カラム幅を設定したいです。ユーザーが望んでいる場合はその expected result

そして同じように、彼は手動で任意の列のサイズを変更することができます(そのため実際の「maxwidthは」ただwidth、設定されていません)。 私は*で作業しようとしましたが、GridViewはその子を知らないので、*はここでは働いていません。autoは、列ごとに最大幅を設定できないため、また幅が一定でないと望ましくないため変数であるウィンドウサイズ(使用可能な領域サイズ)に依存します。コードの中に何らかのイベントが必要だと思っていますが、どのように適切な方法で処理すべきか分かりません。私はデータグリッド(私の意見では、この場合のためのより良い)にあなたのリストビューを変更した

<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> 

+1

いつでもアクションを前面に配置することができます。この方法では、ウィンドウや列の幅に関係なく常に同じ場所に配置されます。 – cguedel

+0

それは動作しますが、それはトリックです。リストは正面のアクションボタンでうまく見えません。 'Name'フィールドが長すぎる場合はどうしますか? – Erexo

答えて

1

はこのような何かを試してみてください。

+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

関連する問題