Laden...

DataGrid soll fensterfüllend alle Zeilen darstellen, die Schriftgröße soll den max. Platz einnehmen

Erstellt von tabstop vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.143 Views
T
tabstop Themenstarter:in
94 Beiträge seit 2007
vor 9 Jahren
DataGrid soll fensterfüllend alle Zeilen darstellen, die Schriftgröße soll den max. Platz einnehmen

Moin,

ich versuche ein DataGrid derart zu füllen, dass sämtliche Zeilen des DataGrids auf einen Blick sichtbar sind ohne Scrollleiste. Dabei soll die Schriftgröße in den Zellen sowie im Header maximal groß sein. Als Beispiel könnte man sich die Fußballbundesligatabelle vorstellen, bei der auf einen Blick alle 18 Mannschaften sichtbar sind.

Ich bekomme es soweit hin, bis auf die Headerzeile. Bin jetzt an einem Punkt gekommen, wo ich Unterstützung benötige. Anbei meine bisherige Lösung:


<Window x:Class="WpfDataGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <DataGrid  Name="dataGrid1" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" VerticalScrollBarVisibility="Hidden" RowHeaderWidth="0" SizeChanged="dataGrid1_SizeChanged">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="INT" Width="1*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Viewbox>
                            <TextBlock Text="{Binding IntValue}"/>
                        </Viewbox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn Header="STRING" Width="2*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Viewbox>
                            <TextBlock Text="{Binding StringValue}"/>
                        </Viewbox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Window>


  public partial class MainWindow : Window
  {
    private List<BO> dataList;

    public MainWindow()
    {
      InitializeComponent();

      this.dataList = GenerateData();
      this.dataGrid1.ItemsSource = dataList;
    }

    private List<BO> GenerateData()
    {
      List<BO> dataList = new List<BO>(
        new BO[]
        { 
          new BO(){ IntValue = 10, StringValue= "Text 10"},
          new BO(){ IntValue = 20, StringValue= "Text 20"},
          new BO(){ IntValue = 30, StringValue= "Text 30"},
          new BO(){ IntValue = 40, StringValue= "Text 40"}
        });

      return dataList;
    }

    private void dataGrid1_SizeChanged(object sender, SizeChangedEventArgs e)
    {
      this.dataGrid1.RowHeight = this.dataGrid1.ActualHeight / (dataList.Count + 1);
      this.dataGrid1.ColumnHeaderHeight = this.dataGrid1.ActualHeight / (dataList.Count + 1);
    }
  }


public class BO
  {
    public int IntValue { get; set; }
    public string StringValue { get; set; }
  }

B
218 Beiträge seit 2012
vor 9 Jahren

Wie schaut es aus eine ViewBox um das DataGrid zu packen?

T
tabstop Themenstarter:in
94 Beiträge seit 2007
vor 9 Jahren

Wie schaut es aus eine ViewBox um das DataGrid zu packen?

Ja, habe ich auch schon drüber nachgedacht und getestet. Jedoch ist es so, dass die ViewBox alles eingebettete transformiert, also neben dem Text z.B. auch die DataGrid-Linien. Dann kommt es drauf an, wieviel Zeilen gleichzeitig dargestellt werden. Bei 18 Zeilen z.B. fällt es nicht so auf, bei weniger Zeilen aber schon.

Von daher ist diese Lösung nicht optimal, aber danke für den Vorschlag.