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; }
}
Hallo,
schau dir mal DataGridColumn.HeaderStyle an - und setze im Style dann die Eigenschaft FontSize.
Wie schaut es aus eine ViewBox um das DataGrid zu packen?
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.