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
||-----||-----||-----||-----||---------------- ||
| |
| |
Ja, mittels Stern ('*'), s. z.B. Stretching columns to fill all available space of DataGrid.
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; }
}
}
Ein ScrollViewer gaukelt dem Datagrid eine unendliche Größe vor. => ScrollViewer entfernen.
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="*"/>
.
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?
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="*"/>
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 😉