myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- GUI: WPF und XAML (https://www.mycsharp.de/wbb2/board.php?boardid=85)
--- Datagrid -stretched column (https://www.mycsharp.de/wbb2/thread.php?threadid=122538)


Geschrieben von Hydrogencarbonat am 10.01.2020 um 10:58:
  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
||-----||-----||-----||-----||---------------- ||
| |
| |


Geschrieben von Th69 am 10.01.2020 um 11:04:
 
Ja, mittels Stern ('*'), s. z.B.  Stretching columns to fill all available space of DataGrid.


Geschrieben von Hydrogencarbonat am 10.01.2020 um 11:56:
 
Hi,

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

XML-Code:
<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>

C#-Code:
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; }
    }
}


Geschrieben von witte am 10.01.2020 um 13:02:
 
Ein ScrollViewer gaukelt dem Datagrid eine unendliche Größe vor. => ScrollViewer entfernen.


Geschrieben von Hydrogencarbonat am 10.01.2020 um 13:48:
 
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.

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

.


Geschrieben von Th69 am 10.01.2020 um 14:16:
 
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?


Geschrieben von Hydrogencarbonat am 10.01.2020 um 15:02:
 
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.

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


Geschrieben von Th69 am 10.01.2020 um 15:29:
 
Kannst du die MaxWidth denn nicht zusätzlich setzen?

XML-Code:
<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):

XML-Code:
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 ;-)


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 04.06.2020 20:50