Laden...

Datagrid -stretched column

Erstellt von Hydrogencarbonat vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.336 Views
H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren
Datagrid -stretched column

Hey,
mein datagrid ist horizontal aligment = "stretch".
wie kann man die letzte Spalte von einem Datagrid stretch machen, so dass diese Spalte bis zum Ende des datagrid geht?

1.hier hat die letzte Spalte anscheinend einen festen Wert und das letzte Stück wird nicht gestretched.
||-----||-----||-----||-----||-----| |
| |
| |
2.die letzte Spalte soll bis zum Ende vom datagrid gehen
||-----||-----||-----||-----||----> |
| |
| |
3. so soll es aussehen
||-----||-----||-----||-----||---------------- ||
| |
| |

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Hi,

ich habe es mit * probiert.
Es klappt abe rirgendwie nicht.
Hier ein kleines Beispiel:


<Window x:Class="datagrid_simple.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:datagrid_simple"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="300">
    <ScrollViewer  VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
                   PanningMode="VerticalOnly" MinWidth="300" MinHeight="500">
        <Grid   >
            <Grid.Resources>
                <ResourceDictionary>
                    <ResourceDictionary.MergedDictionaries>                       
                    </ResourceDictionary.MergedDictionaries>                    
                </ResourceDictionary>
            </Grid.Resources>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Border Grid.Row="1" BorderBrush="Green" Margin="10" BorderThickness="1" CornerRadius="3">
                <Grid Visibility="Visible" Background="WhiteSmoke">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>                      
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <DataGrid x:Name="grid1"
                             HorizontalAlignment="Stretch"
                             HorizontalContentAlignment="Stretch"
                             Margin="10"
                             VerticalAlignment="Center"
                             AlternatingRowBackground="WhiteSmoke"
                             AutoGenerateColumns="False" >                       
                        <DataGrid.Columns>
                            <DataGridTextColumn Binding="{Binding Type}" Header="Name" CanUserResize="True"  Width="Auto"/>
                            <DataGridTextColumn Binding="{Binding Name}" Header="Type" CanUserResize="True"  Width="*"/>
                        </DataGrid.Columns>                       
                    </DataGrid>
                </Grid>
            </Border>  
        </Grid>
    </ScrollViewer>   
</Window>


using System.Collections.Generic;
using System.Windows;

namespace datagrid_simple
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<User> users = new List<User>();
            users.Add(new User() { Id = 1, Type = "Schlange", Name = "Otto" });
            users.Add(new User() { Id = 2, Type = "Fisch", Name = "Walter" });
            users.Add(new User() { Id = 3, Type = "Alien", Name = "Peter" });

            grid1.ItemsSource = users;
        }
    }

    public class User
    {
        public int Id { get; set; }

        public string Type { get; set; }

        public string Name { get; set; }
    }
}


W
955 Beiträge seit 2010
vor 4 Jahren

Ein ScrollViewer gaukelt dem Datagrid eine unendliche Größe vor. => ScrollViewer entfernen.

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Super, vielen Dankes klappt.
Jedoch benutze ich in meinem richtigen Code ein Customize Datagrid.
Und da ist die Voreinstellung von MaxWidth festgelegt.
Dort wird die Spalte nicht gestretched, wenn ich Width="*" benutze.
Müsste ich um zu stretchen die Voreinstellung maxwidth zurücksetzen?
Was kann ich da tun?

In meinem kleinen Beispiel würde es wie folgt aussehen.


  <DataGridTextColumn Binding="{Binding Name}" Header="Type" CanUserResize="True" MaxWidth="100"  Width="*"/>

.

4.931 Beiträge seit 2008
vor 4 Jahren

Was erwartest du denn, wenn du MaxWidth setzt und gleichzeitig die Spalte gestretcht werden soll? Ich erwarte, daß die Spalte dann auf maximal diesen Wert vergrößert wird.
Oder ist bei dir die angezeigte Spalte kleiner als 100 Pixel?

Edit: Oder wolltest du eigentlich MinWidth (also die Mindestbreite) setzen?

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Hi,
ich verwende ein customize DataGridTextColumn "local:DataGridTextColumnCC " und in dem sind verschiedene Properties wie MinWidth, maxwidth etc schon voreingestellt.

Wenn ich nun die Width nachträglich auf * setze dann wurde im Vorfällt gesetzt und ich müsste davon bestimmte wieder zurück setzen. Ansonsten kann ja kein stretch erfolgen, da wie schon erwähnt die maxWidth gesetzt wurde.
Würde nur die MinWidh im vorfällt voreingestellt sein, dann hätte ich das problem ja nicht.


<local:DataGridTextColumnCC Binding="{Binding Name}" Header="Type" CanUserResize="True"  Width="*"/>

4.931 Beiträge seit 2008
vor 4 Jahren

Kannst du die MaxWidth denn nicht zusätzlich setzen?


<local:DataGridTextColumnCC Binding="{Binding Name}" Header="Type" CanUserResize="True" MaxWidth="1000" Width="*"/>

Es sollte (laut Internet) auch so funktionieren (also wieder auf den Default-Wert +Inf setzen):


MaxWidth="{x:Static Double.PositiveInfinity}"

(evtl. noch mit einem Prefix für den "System"-Namespace, s.a. x:Static Markup Extension)

PS: "vorfällt" -> "Vorfeld" (s.a. "Im Vorfeld": Ein Hauptfeld der Sprachverhunzer 😉