2010-09-30 2 views
3

Le texte est grisé lorsque la fonction DatePicker est désactivée et que je souhaite que le contenu soit plus lisible.Facilite la lecture de DatePicker lorsqu'il est désactivé

Ce que je l'ai fait sur certains TextBoxes était:

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

Il a fait plus facile de lire le texte.

Je parviens à modifier la couleur de premier plan sur le DataPicker mais cela ne fonctionne pas. Le texte était toujours grisé.

On dirait qu'il existe une autre propriété que je dois définir pour rendre le contenu du DatePicker désactivé plus facile à lire. Alors, comment rendre le contenu de mon DatePicker désactivé plus facile à lire?

+0

Je crains que vous ayez à obtenir le modèle – dnr3

Répondre

3

Pouvez-vous étendre DatePicker en ajoutant booléen DependencyProperty appelé Modifiable.
Je trouve un exemple de travail à l'adresse suivante link, notez que je lance ce code dans .NET 4.

Voici le contrôle 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); 
    } 
    } 
} 

Voici le 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

le code ci-dessus w ExtendedDatePicker fonctionne, d'abord je pensais que non, mais c'était parce que la liste déroulante pourrait encore changer le texte et le Editable = "False" ne fonctionne pas sur la liste déroulante

donc ne pas oublier d'ajouter ce qui suit à la ExtendedDatePicker

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

Mon Je suggère ce simple, l'approche universelle?

<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

cela peut entraîner la même vraie erreur grave. si vous liez votre isenabled à un viewmodel et par exemple. dans une commande save, vous changez votre isenabled en false, puis revenez à true. vous avez une erreur dans la mesure où vous cliquez sur le popup datepicker. – blindmeis

Questions connexes