Сделать DatePicker легче для чтения при отключении - PullRequest
3 голосов
/ 30 сентября 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 30 сентября 2010

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

Можно ли предложить этот более простой универсальный подход?

<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 голос
/ 27 мая 2011

приведенный выше код w ExtendedDatePicker работает, сначала я подумал, что нет, но это потому, что раскрывающийся список все еще может изменить текст, а Editable = "False" не работает в раскрывающемся меню

, поэтому не забудьте добавить следующее в ExtendedDatePicker

Editable="False" AllowDrop="False" IsDropDownOpen="False" IsHitTestVisible="False" IsManipulationEnabled="False"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...