将DayOfWeek枚举绑定到自定义日历控件网格

时间:2010-09-03 13:54:42

标签: c# wpf

对于非常自定义的日历控件,我需要有一个周对象并将该周内的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; }
}

任何想法?

1 个答案:

答案 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>