2009-05-26 45 views
26

的最後一欄我有3列一個GridView一個ListView。我希望最後一列佔用ListView的剩餘寬度。WPF:延長ListView的GridView控件

+0

這是一個[偉大的鏈接](http://stackoverflow.com/questions/5573152/how-to-resize-a-certain-control-based-on-window-size-in-wpf#5573895)對的。 – FodderZone 2012-12-19 17:33:30

回答

8

有一種方法可以做到這一點使用的行爲模式

<ListView HorizontalAlignment="Stretch" 
          Behaviours:GridViewColumnResize.Enabled="True"> 
        <ListViewItem></ListViewItem> 
        <ListView.View> 
            <GridView> 
                <GridViewColumn  Header="Column *" 
                                   Behaviours:GridViewColumnResize.Width="*" > 
                    <GridViewColumn.CellTemplate> 
                        <DataTemplate> 
                            <TextBox HorizontalAlignment="Stretch" Text="Example1" /> 
                        </DataTemplate> 
                    </GridViewColumn.CellTemplate> 

請參閱以下鏈接的一些例子和鏈接閱讀更多http://lazycowprojects.tumblr.com/post/7063214400/wpf-c-listview-column-width-auto

而且看到日e源代碼。退房 https://github.com/rolfwessels/lazycowprojects/tree/master/Wpf

+0

「行爲:GridViewColumnResize.Width」和「行爲:GridViewColumnResize.Enabled」在WPF中不存在;你在使用第三方框架嗎?提到這一點本來是有用的。現在下調,直到您的答案被修正/更新。 – Krythic 2017-11-08 22:10:35

+0

@Krythic它認爲你可能錯過了我解釋的部分,你需要添加一些源代碼..它們被稱爲行爲...是wpf的一部分。查看github鏈接,將其添加到您的源代碼中。 – 2017-12-01 08:26:41

+0

嗯,我在2011年寫道,我不再真的做WPF了,但我會想象這個問題已經解決了。 – 2017-12-01 08:28:40

6

快速&髒

XAML:

<ListView SizeChanged="ListView_SizeChanged" Loaded="ListView_Loaded" > 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="col1" Width="100" /> 
      <GridViewColumn Header="col1" Width="Auto" /> 
      <GridViewColumn Header="col1" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

CS:

private void ListView_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    UpdateColumnsWidth(sender as ListView); 
} 

private void ListView_Loaded(object sender, RoutedEventArgs e) 
{ 
    UpdateColumnsWidth(sender as ListView); 
} 

private void UpdateColumnsWidth(ListView listView) 
{ 
    int autoFillColumnIndex = (listView.View as GridView).Columns.Count - 1; 
    if (listView.ActualWidth == Double.NaN) 
     listView.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity)); 
    double remainingSpace = listView.ActualWidth; 
    for (int i = 0; i < (listView.View as GridView).Columns.Count; i++) 
     if (i != autoFillColumnIndex) 
      remainingSpace -= (listView.View as GridView).Columns[i].ActualWidth; 
    (listView.View as GridView).Columns[autoFillColumnIndex].Width = remainingSpace >= 0 ? remainingSpace : 0; 
} 
+2

忽略滾動條的樣子。 – Mark 2013-04-14 14:59:09

5

如何使用樣式

<Style x:Key="GridViewExtraStyle" TargetType="{x:Type GridViewColumnHeader}"> 
    <Setter Property="Background" Value="{x:Null}"/> 
    <Setter Property="Foreground" Value="{x:Null}"/> 
    <Setter Property="BorderBrush" Value="{x:Null}"/> 
    <Setter Property="Width" Value="1000"/> 
</Style> 

<ListView> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Abc"/> 
      <GridViewColumn Header="" HeaderContainerStyle="{DynamicResource GridViewExtraStyle}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 
-2

我用蒼白強麥的建議對於小的修改:

<Style x:Key="GridViewExtraStyle" TargetType="{x:Type GridViewColumnHeader}"> 
    <Setter Property="Background" Value="{x:Null}"/> 
    <Setter Property="Foreground" Value="{x:Null}"/> 
    <Setter Property="BorderBrush" Value="{x:Null}"/> 
</Style> 

<ListView> 
    <ListView.View> 
     <GridView ColumnHeaderContainerStyle="{DynamicResource GridViewExtraStyle}"> 
      <GridViewColumn Header="Abc" Width="{Binding Path=mywidth}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 
-2

您不能刪除最後一列,但你可以幹什麼一點幻想。

  <ControlTemplate TargetType="GridViewColumnHeader"> 
       <Grid> 
        <ContentPresenter x:Name="HeaderContent" 
              Content="{TemplateBinding Content}" ... /> 
        <Thumb x:Name="PART_HeaderGripper" ... /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="HasContent" 
          Value="false"> 
         <Setter Property="Visibility" 
           Value="Collapsed" 
           TargetName="PART_HeaderGripper" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
-1

我還沒有看到一個單行/簡單的XAML唯一的解決方案。設置的寬度是適當的設計視圖,然後修改窗口大小變化這樣的寬度:

Private Sub winMain_SizeChanged(sender As Object, e As SizeChangedEventArgs) Handles Me.SizeChanged 
    TryCast(lvwDownload.View, GridView).Columns(3).Width = lvwDownload.ActualWidth - 340 
End Sub 

注意:此邏輯不改變/懸停一列的寬度的另一調整大小時。填寫最後一列的列表視圖非常棒。