2013-05-24 29 views
9

Tôi có một bộ đếm ngày, nhưng nó cho phép tôi nhập bất kỳ văn bản nào. Tôi muốn vô hiệu hóa người dùng khi nhập văn bản. Người dùng phải được phép chọn ngày từ lịch.WPF Datepicker để tắt đầu vào của người dùng

<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

Tại sao không chỉ có một hộp kiểm, hộp văn bản chỉ đọc in giá trị của ngày khi nó được chọn? Tại sao bạn cần một '' cụ thể, nếu nó sẽ là chỉ đọc? – qJake

+0

Tại sao "nhập bất kỳ văn bản" nào là một vấn đề? 'Ngày 24 tháng 5 năm 2013' là một ngày hoàn toàn hợp lệ. Tại sao trừng phạt người dùng thích sử dụng bàn phím? Việc gõ '24/5/13' nhanh hơn nhiều so với việc điều khiển chuột và chọn bộ chọn. –

+0

@CraigYoung: vì vậy bạn không cần phải muck xung quanh với xác nhận đầu vào rác, và các lỗi ràng buộc mà sẽ dẫn đến. – BCA

Trả lời

27

có vẻ như không có tài sản trên DatePicker để làm cho TextBox chỉ đọc.

Thử thiết

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

Làm việc như một sự quyến rũ. –

+0

@ krishnaaditya giải pháp cho RadDatePicker là gì? – swapnil

+0

@krish Ooooh thats một điểm tốt đẹp là điều đó! – IbrarMumtaz

13

phong cách dưới đây Cách thêm thuộc tính

Focusable = "False"

để datepicker của bạn. Điều này không nên cho phép người dùng nhập vào bất kỳ chuỗi trong datepicker textbox

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

Điều này hoạt động tốt hơn. Tôi gặp vấn đề khi văn bản ngày được chọn tự động khi tôi chọn ngày và 'IsReadOnly = True' giải quyết nó. – mandarin

+0

Điều này phù hợp với tôi. Cảm ơn bạn. – user3382285

6

Đặt IsHitTestVisibleFocusable tính để false.

0

một này làm việc cho tôi (phong cách toàn cầu cho tất cả 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> 

Hãy nhận biết: nó cũng đặt ra một định dạng chuỗi tùy chỉnh.

Các vấn đề liên quan