2010-04-14 10 views
6

Ich glaube, ich habe ein Problem mit der DatePicker im Toolkit gefunden, vielleicht können einige von Ihnen Gurus es überprüfen.WPF DatePicker IsEnabled Eigenschaft Aussehen nicht ändern

Das Problem tritt beim Festlegen der IsEnabled Eigenschaft der DatePicker. Wenn in XAML festgelegt, bleibt es grau, auch wenn Sie die IsEnabled zur Laufzeit auf True setzen. Das Gleiche gilt für den umgekehrten Fall, sollte es aktiviert werden.

Die Schaltfläche ändert nur die Eigenschaft IsEnabled der Datumsauswahl, Sie sehen, dass der Stil bei Aktivierung deaktiviert bleibt.

<Window x:Class="WpfApplication3.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel> 
     <tk:DatePicker x:Name="txtDate" IsEnabled="False"></tk:DatePicker> 
     <Button Height="25" Click="Button_Click"></Button> 
    </StackPanel> 
</Window> 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    txtDate.IsEnabled = !txtDate.IsEnabled; 
} 
+0

Haben Sie gefunden, eine Lösung für dieses Problem? –

+0

Nein, alles was ich sagen kann ist, dass es auf meinem Desktop passiert, aber nicht auf meinem Laptop, ich habe das neulich bemerkt, also ist es nicht auf allen Computern. – Jonathan

+0

Ich kann bestätigen, dass ich dieses Problem auch reproduzieren kann. Ich habe den DatePicker, der in .NET 4.0 veröffentlicht wurde, nicht getestet, aber ich nehme an, dass dieses Problem nicht auftreten wird, obwohl es möglich ist. – jpierson

Antwort

-1

dieses Problem wurde in der neuen WPFToolkit gelöst

+0

Im Feb Toolkit? – Jonathan

+0

wir verwenden juni 2009 release. –

+2

Nun, das ist in der letzten Toolkit, die Termine Februar 2010 – Jonathan

0

Hat jemand jemals diese eine Antwort bekommen? Ich habe das gleiche Problem mit der Veröffentlichung vom Februar 2009.

Versuchen Sie es.
1/Verwenden Sie ein Tab-Steuerelement und legen Sie einen Datums-Picker auf der ersten Registerkarte und einen auf der zweiten Registerkarte. 2/Fügen Sie eine Schaltfläche hinzu und setzen Sie im On-Click-Ereignis die IsEnabled-Eigenschaft beider datepicker-Steuerelemente auf den inversen Wert (wenn sie aktiviert war, deaktivieren Sie sie und umgekehrt).

Auf der ersten Registerkarte wird der Datepicker in Ordnung sein. Auf der zweiten wird es deaktiviert angezeigt, aber Sie können den Kalender immer noch öffnen und das Datum ändern.

+0

Wie wäre es mit dem Posten eines Benutzer-Steuerelement, das es abstrahiert – Jonathan

4

Wollen Sie die guten Nachrichten oder die schlechten Nachrichten?

Die gute Nachricht ist, dass Microsoft sagt, dass dieses Problem in der Version Februar 2010 des WPFToolkit behoben wurde. Und es hat.

Die schlechte Nachricht ist, dass, obwohl ein Datepicker des IsEnabled Wert auf „True“ wird die Datepicker aktivieren, damit Sie können jetzt auf dem Kalender klicken, um ein Datum zu wählen, wird es noch deaktiviert aussehen.

"Fehler"? Habe ich das Wort "Käfer" gesagt?

Natürlich nicht. Sie können dieses Problem umgehen, indem Sie eine <Style> anwenden.

Unten finden Sie einige einfache XAML-Code zu demonstrieren.

Es werden zwei Zeilen angezeigt, die jeweils eine CheckBox und einen DatePicker enthalten. Wenn Sie auf ein Kontrollkästchen in einer Zeile klicken, sollte der DatePicker in dieser Zeile aktiviert werden.

Dies zeigt den Unterschied zwischen einem DatePicker ohne Style (in der ersten Zeile) und einem DatePicker mit einem Style (in der zweiten Zeile).

alt text

Beide Kalenderwerkzeug tun/deaktiviert korrekt in der ersten Reihe, aber die man nie sieht, als ob es erhalten aktiviert. Der DatePicker in der zweiten Zeile verwendet eine Style, um den Benutzer anzuzeigen, wenn er deaktiviert ist.

Beachten Sie, wie dieser Code den Hintergrund sowohl der DatePicker Steuerung als auch des DatePickerTextBox Teils davon einstellt.

<Window x:Class="WPFDatePickerTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:wpf="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" 
    Title="Window1" Height="317" Width="461"> 
<Window.Resources> 
    <Style TargetType="{x:Type primitives:DatePickerTextBox}"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Background" Value="Transparent"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
    <Style x:Key="DatePickerStyle1" TargetType="{x:Type wpf:DatePicker}"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="Background" Value="{x:Static SystemColors.InactiveBorderBrush}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<Grid> 
    <StackPanel> 
     <WrapPanel> 
      <CheckBox Height="16" Name="cbDateOfJoining" Width="120">Date of joining</CheckBox> 
      <wpf:DatePicker Height="25" 
          Name="datePicker1" 
          Width="140" 
          IsEnabled="{Binding IsChecked, ElementName=cbDateOfJoining}" /> 
     </WrapPanel> 
     <WrapPanel> 
      <CheckBox Height="16" Name="cbDateOfLeaving" Width="120">Date of leaving</CheckBox> 
      <wpf:DatePicker Height="25" 
          Name="datePicker2" 
          Width="140" 
          IsEnabled="{Binding IsChecked, ElementName=cbDateOfLeaving}" 
          Style="{DynamicResource DatePickerStyle1}" /> 
     </WrapPanel> 
    </StackPanel> 
</Grid> 
</Window> 

Hoffe die hilft!

Und ich hoffe, dass es richtig in der nächsten WPFoolkit Release behoben ist. Benutzer haben sich seit 2009 über dieses Problem beschwert ...

+0

Funktioniert in dieser Situation nicht: Wenn die DatePicker IsEnabled-Eigenschaft an eine CheckBox.IsChecked gebunden ist, dann bleibt DatePicker, wenn Sie den CheckBox-XAML-Code vor DatePicker setzen, immer grau, wenn Sie DatePicker vorher setzen CheckBox dann hast du kein Problem und deine Lösung funktioniert .. Es macht mich verrückt herauszufinden wann es passiert ist. –

1

Eine weitere Möglichkeit, den "ausgegrauten/deaktivierten" Stil zu fälschen, besteht darin, die IsHitTestVisible-Eigenschaft zu missbrauchen.

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:wpf="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    x:Class="CalendarTest.Window1" 
    x:Name="Window" 
    Title="MainWindow" 
    Width="640" 
    Height="480"> 
<StackPanel> 
    <CheckBox x:Name="IsCalendarEnabled" Content="Is Calendar Enabled" /> 
    <wpf:DatePicker IsHitTestVisible="{Binding ElementName=IsCalendarEnabled, Path=IsChecked}"> 
     <wpf:DatePicker.Style> 
      <Style TargetType="{x:Type wpf:DatePicker}"> 
       <Style.Triggers> 
        <Trigger Property="IsHitTestVisible" Value="False"> 
         <Setter Property="Foreground" Value="#FFB9B9B9" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </wpf:DatePicker.Style> 
    </wpf:DatePicker> 
</StackPanel> 
</Window> 

Nur eine weitere temporäre Lösung, bis 'IsEnabled'-Fehler behoben ist. issue 7904/issue 9641

7

Ich löste dies ausdrücklich Datepicker visuellen Stil in IsEnabledChanged Handler Einstellung:

private void datePicker_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    DatePicker datePicker = sender as DatePicker; 
    if (datePicker.IsEnabled) 
     VisualStateManager.GoToState(datePicker, "Normal", true); 
    else 
     VisualStateManager.GoToState(datePicker, "Disabled", true); 
} 
Verwandte Themen