2010-09-30 21 views
3

當DatePicker被禁用時,文本變灰,我希望內容更易於閱讀。使DatePicker在禁用時更易於閱讀

我對一些文本框做了什麼:

<Style TargetType="TextBox"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Foreground" Value="Black" /> 
      </Trigger> 
     </Style.Triggers> 
</Style> 

它確實讓文字更容易閱讀。

我確實設法改變DataPicker上的Foreground顏色,但它沒有辦法。文字仍然變灰。

好像有另一個屬性,我需要設置,使殘疾人的DatePicker更容易閱讀的內容。

那麼,如何讓我禁用的DatePicker的內容更易於閱讀?

+0

恐怕你得去找模板 – dnr3 2010-09-30 10:03:25

回答

3

您可以通過添加名爲Editable的bool DependencyProperty來擴展DatePicker。
我找到工作的例子在以下link,請注意,我在.NET運行此代碼4.

這裏是DatePicker控件:

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Controls.Primitives; 
using System.Windows.Data; 

namespace DatePickerStyle 
{ 
public class ExtendedDatePicker : DatePicker 
{ 
    public static readonly DependencyProperty EditableProperty = DependencyProperty.Register("Editable", typeof(bool), 
     typeof(ExtendedDatePicker), new PropertyMetadata(true)); 
    public bool Editable 
    { 
     get { return (bool)GetValue(EditableProperty); } 
     set { SetValue(EditableProperty, value); } 
    } 

    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     var textBox = GetTemplateChild("PART_TextBox") as DatePickerTextBox; 
     var binding = new Binding { Source = this, Path = new PropertyPath(ExtendedDatePicker.EditableProperty) }; 
     textBox.SetBinding(UIElement.FocusableProperty, binding); 
    } 
    } 
} 

這裏是XAML:

<Window x:Class="DatePickerStyle.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:DatePickerStyle="clr-namespace:DatePickerStyle" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <DatePicker IsEnabled="True" Grid.Row="0" SelectedDate="2002/12/31"/> 
    <DatePicker IsEnabled="False" Grid.Row="1" SelectedDate="2002/12/31"/> 
    <DatePickerStyle:ExtendedDatePicker Editable="True" Grid.Row="2" SelectedDate="2002/12/31"/> 
    <DatePickerStyle:ExtendedDatePicker Editable="False" Grid.Row="3" SelectedDate="2002/12/31"/> 
    </Grid> 
</Window> 
1

上面的代碼W¯¯ExtendedDatePicker工作,開始我還以爲它沒有,但是那是因爲下拉仍然可以更改文本和可編輯=「假」的下拉不起作用

所以不要忘記添加以下到ExtendedDatePicker

Editable="False" AllowDrop="False" IsDropDownOpen="False" IsHitTestVisible="False" IsManipulationEnabled="False" 
2

我我的建議是簡單的,普遍的做法?

<ControlTemplate x:Key="MyDisabledDatePicker"> 
    <Border BorderBrush="Black" BorderThickness="1"> 
     <TextBlock 
      Text="{Binding Path=SelectedDate, StringFormat={}{0:d}, RelativeSource={RelativeSource TemplatedParent}}" 
      VerticalAlignment="Center" HorizontalAlignment="Left" Padding="10,0,0,0"/> 
    </Border> 
</ControlTemplate> 
<Style TargetType="{x:Type DatePicker}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"> 
      <Setter Property="Template" Value="{StaticResource MyDisabledDatePicker}" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Presto!

+1

這可能會導致同真正的壞的錯誤。如果你把你的isenabled綁定到一個視圖模型和例如。在保存命令中,您將isenabled更改爲false,然後返回true。只要單擊日期選擇器彈出窗口,就會出現錯誤。 – blindmeis 2013-05-15 13:45:21