我想从Extended WPF Toolkit设置DateTimePicker的样式,特别是Calendar控件。
<ControlTemplate x:Key="DatePickerTemplate" TargetType="{x:Type xctk:DateTimePicker}">
...
<Calendar x:Name="PART_Calendar" Template="{StaticResource CalendarTemplate}" BorderThickness="0" DisplayDate="2014-05-14"/>"
...
</ControlTemplate>
有什么必要,以便我可以在上面的代码中引用下面的控制模板(两者都在同一个文件中)?
<ControlTemplate x:Key="CalendarTemplate" TargetType="Calendar">
<StackPanel x:Name="Root" HorizontalAlignment="Center">
<CalendarItem x:Name="CalendarItem" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Template="{StaticResource CalendarItemTemplate}"/>
</StackPanel>
</ControlTemplate>
目前VS抱怨:资源&#34; CalendarTemplate&#34;无法解决。
更新
更改定义的顺序后,首先定义<ControlTemplate x:Key="CalendarTemplate" TargetType="Calendar">...
然后使用CalendarTemplate
的ControlTemplate工作,记得我的c ++,但是如果我尝试打开calendarcontrol,现在我得到以下异常:
Add value to dictionary of type 'System.Windows.ResourceDictionary' threw an exception.
答案 0 :(得分:2)
你指的是一个StaticResource,所以你应该声明你的CalendarTemplate,因为它是 x:Key 而不是它的x:名称,即
<ControlTemplate x:Key="CalendarTemplate" TargetType="Calendar">
...
</ControlTemplate>
更新以显示类似的工作(注意这些在我的Xaml文件中定义在同一级别,即直接在我的主视图资源下)
<ControlTemplate x:Key="ABC123" TargetType="Button">
</ControlTemplate>
<!-- creating a control template for TextBox -->
<ControlTemplate x:Key="PasswordBoxTemplateBase" TargetType="{x:Type PasswordBox}">
<Grid x:Name="root" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
<Border x:Name="normalBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<Button Template="{StaticResource ABC123}"/>
</Border>
</Grid>
</ControlTemplate>
答案 1 :(得分:0)
问题是在StaticResource上使用 x:Name 而不是 x:Key 。它应该是这样的( x:Key =“CalendarTemplate” ):
<ControlTemplate x:Key="CalendarTemplate" TargetType="Calendar">
</ControlTemplate>
<ControlTemplate x:Key="DatePickerTemplate" TargetType="DatePicker">
<Calendar x:Name="PART_Calendar" Template="{StaticResource CalendarTemplate}" BorderThickness="0"/>
</ControlTemplate>