对于非常自定义的日历控件,我需要有一个周对象并将该周内的Day对象绑定到网格。我想我会让DayOfWeek枚举确定哪一天应该在网格内。这样,如果月份从星期二开始,它将具有属性Grid.Column =“2”。但由于某些原因,所有这些都最终出现在第一栏,我不知道为什么。
<ItemsControl ItemsSource="{Binding Weeks}" SnapsToDevicePixels="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Days}"> <!--7 most of the time-->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="28" />
<ColumnDefinition Width="28" />
<ColumnDefinition Width="28" />
<ColumnDefinition Width="28" />
<ColumnDefinition Width="28" />
<ColumnDefinition Width="28" />
<ColumnDefinition Width="28" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Date.Day}" Grid.Column="{Binding DayOfWeekInt}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我对日期对象的属性绑定如此:
public int DayOfWeekInt
{
get { return (int)Date.DayOfWeek; }
}
任何想法?
答案 0 :(得分:0)
事实证明,ItemsControl正在使用ContentPresenter包装TextBlock,屏蔽TextBlock上的Grid.Column。这可以通过在ContentPresenter上设置样式来缓解:
<ItemsControl.Resources>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Grid.Column" Value="{Binding Path=DayOfWeekInt}" />
</Style>
</ItemsControl.Resources>