2013-05-24 11 views
9

Ho un DatePicker, ma mi permette di inserire qualsiasi testo. Voglio disabilitare l'utente dall'inserimento di testo. L'utente dovrebbe essere autorizzato a selezionare la data dal calendario.WPF Datepicker per disabilitare l'input dell'utente

<Window x:Class="MyTestForDatePicker.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <!--<Grid>--> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="auto"></ColumnDefinition> 
       <ColumnDefinition></ColumnDefinition> 
       <ColumnDefinition Width="auto"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="auto"></RowDefinition> 
       <RowDefinition></RowDefinition> 
      </Grid.RowDefinitions> 
      <DatePicker Grid.Column="0" Grid.Row="0" Margin="2" Name="MySelectedDate"  VerticalContentAlignment="Center" ></DatePicker> 
     <DatePickerTextBox Grid.Column="1" Grid.Row="3" Margin="2" Name="SelectedDate" IsReadOnly="True"></DatePickerTextBox> 
     <Button Grid.Column="1" Grid.Row="1" Margin="100,102,203,154" VerticalContentAlignment="Center" Name="Ok" Click="Ok_Click_1"/> 
    </Grid> 

+0

Perché non avere una sola casella di testo di sola lettura, stampare il valore della data una volta che è stata selezionata? Perché hai bisogno di un '' in particolare, se sarà di sola lettura? – qJake

+0

Perché "inserire un testo" è un problema? '24 maggio 2013' è una data perfettamente valida. Perché punire gli utenti che preferiscono usare la tastiera? È molto più veloce digitare '24/5/13' piuttosto che muck about con un mouse e controllo picker. –

+0

@CraigYoung: così non devi perdere tempo con la convalida del garbage input e gli errori di binding che ne derivano. – BCA

risposta

27

sembra che non v'è alcuna proprietà su DatePicker per rendere il TextBox sola lettura.

Prova lo stile di sotto impostazione

 <DatePicker x:Name="MyDatePicker"> 
      <DatePicker.Resources> 
       <Style TargetType="DatePickerTextBox"> 
        <Setter Property="IsReadOnly" Value="True"/> 
       </Style> 
      </DatePicker.Resources> 
     </DatePicker> 
+0

Funziona come un fascino. –

+0

@krishnaaditya qual è la soluzione per RadDatePicker? – swapnil

+0

@krish Ooooh questo è un bel posto! – IbrarMumtaz

13

Aggiungere la proprietà

Focusable = "False"

al vostro datepicker. Questo non dovrebbe permettere all'utente di inserire qualsiasi stringa di testo datepicker

<DatePickerTextBox Grid.Column="1" Grid.Row="3" Margin="2" Name="SelectedDate" IsReadOnly="True" Focusable="False"></DatePickerTextBox> 
+0

Funziona ancora meglio. Ho avuto un problema in cui il testo della data viene selezionato automaticamente quando seleziono una data e 'IsReadOnly = True' lo risolve. – mandarin

+0

Questo funziona per me. Grazie. – user3382285

6

Impostare le proprietà IsHitTestVisible e Focusable a false.

0

Questo ha lavorato per me (stile globale per tutti datepickers):

<Style TargetType="{x:Type DatePickerTextBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <TextBox IsReadOnly="True" x:Name="PART_TextBox" Text="{Binding Path=SelectedDate, StringFormat='dd.MM.yyyy', RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Attenzione: imposta anche un formato stringa personalizzata.

Problemi correlati