WPF Radcalender自定义日模板格式

WPF Radcalender customization day template format

我想在我的 wpf mvvm 应用程序中创建 wpf radcalender。我无法自定义日历日模板。我要这个格式。

我正在使用此代码。但是文字已经被日期覆盖了。

xmal:

<telerik:RadCalendar Margin="30" SelectableDateStart="2015-01-01" SelectableDateEnd="2015-01-31" >          
                <telerik:RadCalendar.DayTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBox Text="Test"/>
                    </StackPanel>
                </DataTemplate>
            </telerik:RadCalendar.DayTemplate>            
        </telerik:RadCalendar>

我在 Winrt 应用程序中使用过 RadCalendar,在这里我是如何解决这个问题的(在官方文档的帮助下)

首先添加一个新的转换器,它将 return 像这样的日期标签:

public class CellModelConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            var cellModel = value as CalendarCellModel;                       
            return cellModel.Label;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }  

然后在您 Xaml 添加一个文本块以使用以前的转换器显示单元格日期:

<telerik:RadCalendar Margin="30" SelectableDateStart="2015-01-01" SelectableDateEnd="2015-01-31" >
            <telerik:RadCalendar.DayTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBox Text="Test"/>
                        <TextBlock Text="{Binding Converter={StaticResource CellModelConverter}}" FontSize="13.333" VerticalAlignment="Bottom" Margin="6,0,0,4" />
                    </StackPanel>
                </DataTemplate>
            </telerik:RadCalendar.DayTemplate>
        </telerik:RadCalendar>

不要忘记将转换器添加到静态资源中:

<converters:CellModelConverter x:Key="CellModelConverter" />

--编辑 1

上面的代码在 Winrt 应用程序中运行良好,对于 WPF 项目,您根本不需要转换器:

 <telerik:RadCalendar Margin="30" SelectableDateStart="2015-01-01" SelectableDateEnd="2015-01-31" >
            <telerik:RadCalendar.DayTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBox Text="Test"/>
                        <TextBlock Text="{Binding}" FontSize="13.333" VerticalAlignment="Bottom" Margin="6,0,0,4" />
                    </StackPanel>
                </DataTemplate>
            </telerik:RadCalendar.DayTemplate>
        </telerik:RadCalendar>

--编辑 2

上面的代码显示了所有单元格中的 "test" 文本,包括 WeekName、DayName ...,以解决您可以使用 Converter 或 DataTrigger 的问题,这里是如何使用 DataTrigger 进行操作:

<telerik:RadCalendar Margin="30" SelectableDateStart="2015-01-01" SelectableDateEnd="2015-01-31" >
            <telerik:RadCalendar.DayTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBox Text="Test">
                            <TextBox.Style>
                               <Style TargetType="TextBox">
                                   <Setter Property="Visibility" Value="Collapsed"></Setter>
                                   <Style.Triggers>
                                        <DataTrigger Binding="{Binding DataContext.ButtonType,ElementName=tb}"
                       Value="Date">
                                            <Setter Property="Visibility" Value="Visible" />
                                        </DataTrigger>
                                    </Style.Triggers>
                               </Style>
                            </TextBox.Style>
                        </TextBox>
                        <TextBlock x:Name="tb" Text="{Binding Converter={StaticResource CellModelConverter}}" FontSize="13.333" VerticalAlignment="Bottom" Margin="6,0,0,4" />
                    </StackPanel>
                </DataTemplate>
            </telerik:RadCalendar.DayTemplate>
        </telerik:RadCalendar> 

输出: