2010-09-30 2 views
3

Текст отключен, когда DatePicker отключен, и я хочу, чтобы содержимое было легче читать.Сделать DatePicker проще для чтения, когда отключен

То, что я сделал на некоторых TextBoxes был:

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

Это действительно сделать текст легче читать.

Мне удаётся изменить цвет переднего плана на DataPicker, но это не делает трюк. Текст был по-прежнему выделен серым цветом.

Похоже, есть еще одно свойство, которое мне нужно настроить, чтобы сделать содержимое отключенного DatePicker более легким для чтения.

Итак, как сделать содержимое моего отключенного DatePicker более легким для чтения?

+0

Я боюсь, что вам нужно добраться до шаблона – dnr3

ответ

3

Можете ли вы продлить DatePicker, добавив bool DependencyProperty под названием Editable.
я нашел рабочий пример на следующем 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 работает, сначала я думал, что это не так, но это потому, что выпадающее меню все равно может изменить текст, а Editable = «False» не работает в раскрывающемся списке

поэтому не забудьте добавить следующее в 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 к viewmodel и, например. в команде сохранения вы измените значение isenabled на false, а затем вернитесь к true. у вас есть ошибка, когда вы нажимаете всплывающее окно datepicker. – blindmeis

Смежные вопросы