15

我有一个日期选择器,但它允许我输入任何文本。我想禁止用户输入文本。应该允许用户从日历中选择日期。

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

4

6 回答 6

39

似乎 DatePicker 上没有属性可以使 TextBox 只读。

尝试以下样式设置

        <DatePicker x:Name="MyDatePicker">
            <DatePicker.Resources>
                <Style TargetType="DatePickerTextBox">
                    <Setter Property="IsReadOnly" Value="True"/>
                </Style>
            </DatePicker.Resources>
        </DatePicker>
于 2013-05-24T18:24:58.917 回答
20

添加属性

Focusable = "False"

到您的日期选择器。这不应该允许用户在 datepicker 文本框中输入任何字符串

<DatePickerTextBox Grid.Column="1" Grid.Row="3" Margin="2" Name="SelectedDate"   IsReadOnly="True" Focusable="False"></DatePickerTextBox>
于 2013-05-24T20:13:49.130 回答
10

IsHitTestVisibleFocusable属性设置为false

于 2013-11-04T13:09:42.700 回答
1

这对我有用(所有日期选择器的全局样式):

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

请注意:它还设置了自定义字符串格式。

于 2016-01-19T07:45:22.140 回答
0

无需为 datepicker 设置任何内容,当您离开焦点时 datepicker 会自动删除文本,只有日期保留在文本框中。

于 2019-05-06T08:30:24.777 回答
-2

只需将 IsEnabled 设置为 false 即可解决您的问题

于 2018-06-11T11:30:30.023 回答