Ich habe ein DataGrid, das in einem einer Reihe von Expandern in einem größenveränderbaren Fenster ist. Wenn die DataGrid-Zeilen geladen werden, erstreckt sich das DataGrid ohne Scrollbalken vom unteren Rand des Fensters.Wie werden die Bildlaufleisten eines DataGrids angezeigt, wenn sie sich in einem Expander befinden?
Ich habe das Problem auf die einfachsten Elemente reduziert Ich konnte unter
Ich habe versucht, das Datagrid in einem separaten Scroll setzen, aber das gleiche Problem hatte.
Ich brauche auch die anderen beiden Expander im Fenster sichtbar zu bleiben und nicht von der Kante geschoben werden. Ich hatte ein wenig Erfolg, als ich die drei Expander in ein DockPanel steckte, aber das DataGrid wurde immer noch erweitert, um das gesamte Fenster auszufüllen, sodass die anderen Expanders nicht mehr sichtbar waren.
XAML
<Window x:Class="WPFTestApp.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:WPFTestApp"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid Name="root">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Expander Grid.Row="0" Name="Expander1" Expanded="Expander_Expanded">
<Expander.Header>Expander</Expander.Header>
<Expander.Content>
<ScrollViewer>
<DataGrid Grid.Row="1" Name="dataGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="A" Binding="{Binding A}" />
<DataGridTextColumn Header="B" Binding="{Binding B}" />
<DataGridTextColumn Header="C" Binding="{Binding C}" />
<DataGridTextColumn Header="D" Binding="{Binding D}" />
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Expander.Content>
</Expander>
<Expander Grid.Row="1" Name="Expander2" Expanded="Expander_Expanded">
<Expander.Content>
<TextBlock>...<LineBreak/>...<LineBreak/>...<LineBreak/>...<LineBreak/>...<LineBreak/>...</TextBlock>
</Expander.Content>
</Expander>
<Expander Grid.Row="2" Name="Expander3" Expanded="Expander_Expanded">
<Expander.Content>
<TextBlock>...<LineBreak/>...<LineBreak/>...<LineBreak/>...<LineBreak/>...<LineBreak/>...</TextBlock>
</Expander.Content>
</Expander>
</Grid>
</Window>
Codebehind
using System;
using System.Windows;
namespace WPFTestApp {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public class Data {
public Guid A { get; set; }
public Guid B { get; set; }
public Guid C { get; set; }
public Guid D { get; set; }
public Data() {
A = Guid.NewGuid();
B = Guid.NewGuid();
C = Guid.NewGuid();
D = Guid.NewGuid();
}
}
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
for (int x = 0; x < 20; x++) {
dataGrid.Items.Add(new Data());
}
}
private void Expander_Expanded(object sender, RoutedEventArgs e) {
if (Expander1 != sender)
Expander1.IsExpanded = false;
if (Expander2 != sender)
Expander2.IsExpanded = false;
if (Expander3 != sender)
Expander3.IsExpanded = false;
}
}
}
, die in der alle drei Expanders die gleiche Menge an vertikalen Raum gibt Raster, egal ob sie erweitert sind oder nicht. Ich spielte mit den RowDefinition-Höhen herum und erkannte, dass ich die Höhen zwischen Auto und 1 * in der Expander_Expanded-Funktion ändern konnte und es gab mir genau das, was ich wollte. – Hypersapien
Sie können die Höhe auf das einstellen, was Sie wollen, aber Auto - entweder in der XAML-Markierung oder programmgesteuert. 1 * war nur ein Beispiel. – mm8
Ich sage nur, dass die Höhen der RowDefinitions unterschiedlich eingestellt werden müssen, abhängig davon, ob der Expander erweitert ist oder nicht. Ich habe meine Lösung hier gepostet. – Hypersapien