2009-05-26 15 views

Odpowiedz

8

Jest sposób, aby to zrobić za pomocą zachowania zależnego

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

Zobacz poniższy link do niektórych przykładów i łącza, aby przeczytać więcej http://lazycowprojects.tumblr.com/post/7063214400/wpf-c-listview-column-width-auto

I do zobaczenia e kod źródłowy. Sprawdź https://github.com/rolfwessels/lazycowprojects/tree/master/Wpf

+0

"Zachowania: GridViewColumnResize.Width" i "Behaviors: GridViewColumnResize.Enabled" nie istnieje w WPF; używasz frameworku innej firmy? Przydałoby się to wspomnieć. Teraz rezygnujesz, dopóki twoja odpowiedź nie zostanie naprawiona/zaktualizowana. – Krythic

+0

@Krythic myślę, że mogłeś pominąć sekcję, którą wyjaśniam, że musisz dodać kod źródłowy. Nazywa się to zachowaniami ... jest częścią wpf. Zobacz link github, Dodaj to do swojego kodu źródłowego. –

+0

Hmm, napisałem, że w 2011 roku tak naprawdę nie robię WPF, ale wyobrażam sobie, że problem ten jest już rozwiązany. –

6

szybkie & brudną

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

Ignoruje pasek przewijania. – Mark

+0

Ja przegłosowałem za brak odpowiednich konwencji programowania. Użyłeś praktycznie zerowych nawiasów klamrowych, a Resharper całkowicie oświetlił twój kod sugestiami. – Krythic

5

Jak o użyciu stylu

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

To jest najlepsza odpowiedź, jaką widziałem. Prosty i skuteczny. – Joe

+0

Niestety, masz długi poziomy pasek przewijania, aby poradzić sobie z –

-2

użyłem sugestię Pale Ales męska z niewielką zmianą:

<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

Nie można usunąć ostatnią kolumnę ale można Koncentracja trochę złudzenie.

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

OP nie chce ukryć ostatniej kolumny, chcą ją rozszerzyć, aby wypełnić pozostałą szerokość – JumpingJezza

-1

Nie widziałem jednoliniowego/prostego rozwiązania tylko XAML. Ustaw szerokość, która jest odpowiednia do widoku projektu, a następnie zmodyfikować szerokość na zmianę rozmiaru okna jak poniżej:

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 

UWAGA: Ta logika nie zmienia/najechaniu szerokość kolumny, gdy inny jest zmieniany. Świetnie nadaje się do wypełniania listview ostatnią kolumną.

Powiązane problemy