【发布时间】:2011-09-26 17:24:41
【问题描述】:
如果我将列的宽度设置为*,它们最初的宽度相同,但如果一个项目大于允许的数量,那么它将拉伸列宽。
如何通过明确定义大小来强制我的 Grid 保持其列的大小相同?
我不能使用 UniformGrid,因为此 Grid 正在 ItemsControl 中使用,并且项目需要放置在特定的 Grid.Row/Grid.Column 点中
编辑这是我当前代码的示例。
<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>
编辑#2这是我的最终解决方案。它使列的大小正确,并在应用程序调整大小时保持正确的大小。
<ColumnDefinition Width="{Binding
ElementName=RootControl,
Path=ActualWidth,
Converter={StaticResource MathConverter},
ConverterParameter=(@VALUE-150)/7}" />
150 是行标题的宽度 + 所有边距和边框。我实际上正在将我的MathConverter 更新为IMultiValueConverter,因此我可以绑定两个参数(如果您对转换器代码感兴趣,可以找到here,尽管它只是单值转换器)
【问题讨论】: