大佬教程收集整理的这篇文章主要介绍了如何在silverlight中为模板化控件添加事件?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<Style TargetType="local:DatePicker"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:DatePicker"> <Border BACkground="{TemplateBinding BACkgrounD}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" x:Name="myDatePickerContentArea"> <StackPanel Orientation="Vertical"> <Button x:Name="myTESTButton" Content="Test button" /> <telerik:radDatePicker Style="{Staticresource VisitsReportTextBoxStylE}" Foreground="#FFFFFF" x:Name="startDate" datetiR_48_11845@eWatermarkContent="Start Date"/> <telerik:radDatePicker Style="{Staticresource VisitsReportTextBoxStylE}" x:Name="endDate" datetiR_48_11845@eWatermarkContent="End Date"/> </StackPanel> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
此模板的C#是:
public class DatePicker : Control { public static readonly DependencyProperty StartDateSELEctedDateProperty = DependencyProperty.Register("StartDateSELEctedDateProperty",typeof(datetiR_48_11845@E),typeof(DatePicker),null); public datetiR_48_11845@e? StartDateSELEctedDate { get; set; } public DatePicker() { this.DefaultStyleKey = typeof(DatePicker); } public override void OnApplyTemplate() { RadDatePicker StartDate = this.GetTemplateChild("startDate") as RadDatePicker; StartDate.SELEctionChanged += new Telerik.Windows.Controls.SELEctionChangedEventHandler(StartDate_SELEctionChanged); StartDate.SELEctedDate = new datetiR_48_11845@e(2010,01,01); base.onApplyTemplate(); } void StartDate_SELEctionChanged(object sender,Telerik.Windows.Controls.SELEctionChangedEventArgs E) { RadDatePicker temp = (RadDatePicker)sender; StartDateSELEctedDate = temp.SELEctedDate; } }
我的选择改变事件不起火,我不知道为什么.
有任何想法吗 ?
[TemplatePart(Name = DatePicker.ElementStartDate,Type = typeof(RadDatePicker))] [TemplatePart(Name = DatePicker.ElementEndDate,Type = typeof(RadDatePicker))] public class DatePicker : Control { public DatePicker() { this.DefaultStyleKey = typeof(DatePicker); } #region Template Part Names private const String ElementStartDate = "startDate"; private const String ElementEndDate = "endDate"; #endregion #region Template Parts private RadDatePicker _StartDate; internal RadDatePicker StartDate { get { return _StartDate; } private set { if (_StartDate != null) { _StartDate.SELEctionChanged -= StartDate_SELEctionChanged; } _StartDate = value; if (_StartDate != null) { _StartDate.SELEctionChanged += StartDate_SELEctionChanged; } } } private RadDatePicker _EndDate; internal RadDatePicker EndDate { get { return _EndDate; } private set { if (_EndDate!= null) { _EndDate.SELEctionChanged -= EndDate_SELEctionChanged; } _EndDate= value; if (_EndDate!= null) { _EndDate.SELEctionChanged += EndDate_SELEctionChanged; } } } #endregion public static readonly DependencyProperty StartDateSELEctedDateProperty = DependencyProperty.Register( "StartDateSELEctedDateProperty",typeof(datetiR_48_11845@e?),new PropertyMetaData(new datetiR_48_11845@e(2010,01))); public datetiR_48_11845@e? StartDateSELEctedDate { get { return (datetiR_48_11845@e?)GetValue(StartDateSELEctedDateProperty); } set { SETVALue(StartDateSELEctedDateProperty)} } public static readonly DependencyProperty EndDateSELEctedDateProperty = DependencyProperty.Register( "EndDateSELEctedDateProperty",01))); public datetiR_48_11845@e? EndDateSELEctedDate { get { return (datetiR_48_11845@e?)GetValue(EndDateSELEctedDateProperty); } set { SETVALue(EndDateSELEctedDateProperty)} } public override void OnApplyTemplate() { base.onApplyTemplate(); StartDate = GetTemplateChild(ElementStartDatE) as RadDatePicker; EndDate = GetTemplateChild(ElementEndDatE) as RadDatePicker; } void StartDate_SELEctionChanged(object sender,Telerik.Windows.Controls.SELEctionChangedEventArgs E) { // Do stuff with StartDate here } void EndDate_SELEctionChanged(object sender,Telerik.Windows.Controls.SELEctionChangedEventArgs E) { // Do stuff with EndDate here } }
模板Xaml应如下所示: –
<Style TargetType="local:DatePicker"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:DatePicker"> <Border BACkground="{TemplateBinding BACkgrounD}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" x:Name="myDatePickerContentArea"> <StackPanel Orientation="Vertical"> <Button x:Name="myTESTButton" Content="Test button" /> <telerik:radDatePicker x:Name="startDate" Style="{Staticresource VisitsReportTextBoxStylE}" Foreground="#FFFFFF" datetiR_48_11845@eWatermarkContent="Start Date" SELEctedDate="{TemplateBinding StartDateSELEctedDatE}" /> <telerik:radDatePicker x:Name="endDate" Style="{Staticresource VisitsReportTextBoxStylE}" datetiR_48_11845@eWatermarkContent="End Date" SELEctedDate="{TemplateBinding EndDateSELEctedDatE}" /> </StackPanel> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
一些解释
>您的原始代码的一个关键问题是它没有正确实现依赖项属性.请注意,属性现在使用GetValue和SETVALue,并且属性元数据用于分配默认值而不是尝试在onapplytemplate中设置.>在正确实现属性的情况下,模板绑定应该可以正常工作,实际上我们已经完成了看似你原来的意图,因此我在事件处理程序中遗漏了任何实际的代码.>在代码中创建常量以保存要与之交互的关键模板部件的名称,这样可以降低名称更改的成本.>将TemplatePart属性添加到类中,以指示代码期望找到的关键元素,它们的名称应该是什么以及它们应具有的基本类型.这允许设计者重新模板化现有控件,只要声明的模板部件存在,控件应该正确地运行,即使其UI被彻底改变.>如果需要为某些元素附加事件处理程序,请创建一个字段来保存对该元素的引用,然后创建一个包围它的属性.然后,属性设置器应该分离并附加事件处理程序,如代码中所示.>确保在OnApplyTemplate的覆盖中调用bae.onApplyTemplate,然后您可以看到它非常直接地分配上面创建的属性.>我没有RadDatePicker所以我无法测试,我唯一关注的是datetiR_48_11845@e在哪里?是SELEctedDate属性的正确类型.当然,如果它是对微软产品的改进,似乎已经在这个典型的数据输入要求上放弃了.
以上是大佬教程为你收集整理的如何在silverlight中为模板化控件添加事件?全部内容,希望文章能够帮你解决如何在silverlight中为模板化控件添加事件?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。