如何将Silverlight DatePicker控件设置为只读?

如何将Silverlight DatePicker控件设置为只读?,silverlight,datepicker,Silverlight,Datepicker,如何将Silverlight项目中使用的System.Windows.Controls.DatePicker控件设置为只读 在Xaml或代码隐藏中似乎没有任何可以设置的属性。为什么要设置 DatePicker是一个美化的组合框,可以下拉日历而不是列表。如果它变成只读,那么它实际上就是一个只读文本框 如果只是为了外观,那么解决方法是复制控件模板并对其进行编辑,使其禁用状态与活动状态相同,然后在需要只读行为时将其设置为禁用。如何处理日期更改事件并将其抑制并恢复到今天的日期(或其他设置日期)?我找到

如何将Silverlight项目中使用的
System.Windows.Controls.DatePicker
控件设置为只读

在Xaml或代码隐藏中似乎没有任何可以设置的属性。

为什么要设置

DatePicker是一个美化的组合框,可以下拉日历而不是列表。如果它变成只读,那么它实际上就是一个只读文本框


如果只是为了外观,那么解决方法是复制控件模板并对其进行编辑,使其禁用状态与活动状态相同,然后在需要只读行为时将其设置为禁用。

如何处理日期更改事件并将其抑制并恢复到今天的日期(或其他设置日期)?

我找到了日期选择器的源代码,并添加了一个只读属性

…而且“是的”有一个值得拥有的理由。我想要有三种状态:

  • 正常的
  • 禁用(灰显外观)
  • 只读(不灰显且无日历按钮…还更改了文本框的边框,使其看起来像标签)
  • 3的样式是我的首选,但我特别想区分禁用的控件(灰显)和只读的“视觉”控件


    不确定是否发布代码(有很多)…或者是否还有人感兴趣;-)

    我解决了这个问题,为DatePickerTextBox控件设置了新样式。此控件是日期选择器样式的一部分。然后使用这些行,您可以使所有可以访问此样式的DatePicker控件成为只读。这只会使只读成为手动编辑日期,用户仍然可以使用下拉按钮选择日期

    <Style TargetType="prim:DatePickerTextBox">
      <Setter Property="IsReadOnly" Value="True"/>
    </Style>
    
    
    
    原因是,在只读情况下,我可以只显示相同的控件,而不必将其更改为文本框。我基本上只需要它来显示日期,而不需要用户通过直接在文本框中键入日期或通过下拉日历来更改日期。为什么要这样做?DatePicker上没有ReadOnly这样的属性。问题中没有足够的信息来理解他想要的行为。一个非常有效的理由是显示当前选择的日期,并且只允许用户在控件处于“编辑”模式时更改该日期。这种方法的缺点是,在最终用户看来,他们可以使用该控件做一些事情。。。但当他们尝试时,他们的输入被“丢失”并恢复。它会增加你的人工智能的混乱。最好在视觉上表明控件仅用于显示目的,而不是让用户意识到他甚至不应该尝试