Wenn ich die Breite der Säule auf *
Wenn aber ein Element größer ist als der zulässige Wert, wird die Breite der Spalte gestreckt.
Wie kann ich mein Grid dazu zwingen, die gleiche Größe der Spalten beizubehalten, ohne explizit eine Größe zu definieren?
Ich kann kein UniformGrid verwenden, da dieses Raster in einem ItemsControl verwendet wird und die Items in bestimmten Bereichen platziert werden müssen. Grid.Row
/ Grid.Column
Flecken
bearbeiten Hier ist ein Beispiel für meinen aktuellen Code.
<DockPanel>
<!-- Not showing code here for simplicity -->
<local:ColumnHeaderControl DockPanel.Dock="Top" />
<local:RowHeaderControl DockPanel.Dock="Left" />
<ItemsControl ItemsSource="{Binding Events}">
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column"
Value="{Binding DueDate.DayOfWeek,
Converter={StaticResource EnumToIntConverter}}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsPanel>
</ItemsControl>
</DockPanel>
Bearbeiten #2 Hier ist meine endgültige Lösung. Es macht die Spalten die richtige Größe, und es hält die Größe korrekt, wenn die Anwendung Größe geändert wird.
<ColumnDefinition Width="{Binding
ElementName=RootControl,
Path=ActualWidth,
Converter={StaticResource MathConverter},
ConverterParameter=(@VALUE-150)/7}" />
150 ist die Breite der Zeilenüberschriften + alle Ränder und Umrandungen. Ich bin gerade dabei, meine Website zu aktualisieren. MathConverter
zu einer IMultiValueConverter
so dass ich beide Parameter binden kann (Wenn Sie am Code des Konverters interessiert sind, finden Sie ihn unter aquí (obwohl es sich nur um den Einwertkonverter handelt)