Как удалить время из datetime из текстового поля календаря после выделения табуляции в XAML

#.net #wpf #xaml #datetime #c#-4.0

#.net #wpf #xaml #datetime #c #-4.0

Вопрос:

datetimeПриведенный ниже код отлично работал в .Net 3.5, но в .Net 4.0 время отображается в текстовом поле календаря после выделения вкладки.когда фокус сосредоточен на текстовом поле календаря, время не отображается. только после выделения табуляции отображается время, как показано на прикрепленном изображении. Я не хочу участвовать в этом.

Используемый код выглядит следующим образом:

 <jkdp:XamDateTimeEditor Grid.Row="1"
                        Grid.Column="1"
                        KeyboardNavigation.TabIndex="1"
                        InvalidValueBehavior="RetainValue"
                        gcb:CommandBehavior.Event="LostFocus"
                        gcb:CommandBehavior.Command="{Binding EndDateChangedCommand}"
                        Style="{DynamicResource XamDateTimeEditor.SimpleStyle}"
                        Text="{Binding EndDate, Mode=TwoWay, NotifyOnSourceUpdated=true}" >

<Style x:Key="XamDateTimeEditor.SimpleStyle"
       TargetType="{x:Type igdEd:XamDateTimeEditor}"
       BasedOn="{StaticResource XamDateTimeEditor.DefaultFromStyle}">
    <Setter Property="Height"
            Value="22" />
    <Setter Property="Width"
            Value="150" />
    <Setter Property="Margin"
            Value="10,0,10,0" />
    <Setter Property="VerticalAlignment"
            Value="Center" />
    <Setter Property="HorizontalAlignment"
            Value="Left" />
    <Setter Property="ContextMenu"
            Value="{StaticResource CutCopyPasteEditorStyle}" />

    <Setter Property="vw:InputBindingBehaviour.EnableErrorToolTip"
            Value="True" />
    <Setter Property="Focusable"
            Value="False"></Setter>
    <Setter Property="KeyboardNavigation.IsTabStop"
            Value="False"></Setter>

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid Focusable="False"
                      KeyboardNavigation.IsTabStop="False">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <TextBox Name="PART_TextBox"
                             Grid.Column="0"
                             VerticalAlignment="Center"
                             Focusable="True"
                             KeyboardNavigation.IsTabStop="True"
                             Margin="0,0,2,0"
                             Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource TemplatedParent}}"
                             ContextMenu="{Binding Path=ContextMenu, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
                    <TextBlock Name="PART_TextBlock"
                               Grid.Column="0"
                               Focusable="False"
                               KeyboardNavigation.IsTabStop="False"
                               VerticalAlignment="Center"
                               HorizontalAlignment="Left"
                               Margin="3,0,2,0"
                               Text="{Binding Path=NullText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource TemplatedParent}}"
                               Visibility="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource NullConverter}, ConverterParameter=Visibility}" />
                    <ToggleButton Grid.Column="1"
                                  Focusable="False"
                                  KeyboardNavigation.IsTabStop="False"
                                  MinWidth="{Binding Path=ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}"
                                  IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
                        <Image Source="Calendar.bmp"
                               Focusable="False"
                               KeyboardNavigation.IsTabStop="False"
                               Margin="2" />
                    </ToggleButton>
                </Grid>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource NullConverter}}"
                                 Value="True">
                        <Setter TargetName="PART_TextBox"
                                Property="Visibility"
                                Value="Collapsed" />
                    </DataTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="EditTemplate">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type igdEd:XamDateTimeEditor}">
                <Grid   Focusable="False"
                        KeyboardNavigation.IsTabStop="False">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <igdEd:XamDateTimeEditor x:Name="PART_DateTimeEditor"
                                             BorderThickness="0"
                                             Background="Transparent"
                                             Focusable="False"
                                             KeyboardNavigation.IsTabStop="False"
                                             Grid.ColumnSpan="2"
                                             Theme="{Binding Path=Theme, Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}"
                                             NullText="{Binding Path=NullText, Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}"
                                             DataMode="{Binding Path=DataMode, Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}"
                                             InvalidValueBehavior="{Binding Path=InvalidValueBehavior, Mode=OneTime, RelativeSource={RelativeSource TemplatedParent}}"
                                             IsDropDownOpen="{Binding Path=IsChecked, ElementName=PART_ToggleButton, Mode=TwoWay}"
                                             Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource TemplatedParent}}"
                                             Value="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource TemplatedParent}}"
                                             ValueConstraint="{Binding Path=ValueConstraint, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                                             ContextMenu="{Binding Path=ContextMenu, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
                    <vw:CommitTextBox x:Name="PART_FocusSite"
                             Grid.Column="0"
                             Focusable="True"
                             KeyboardNavigation.IsTabStop="True"
                             MaxLength="10"
                             Margin="0,0,2,0"
                             Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=LostFocus, Converter={StaticResource DateTimeConverter}, ConverterParameter=DateFromStyle, RelativeSource={RelativeSource TemplatedParent}}"
                             ContextMenu="{Binding Path=ContextMenu, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" 
                             Style="{StaticResource TextBox.NormalStyle}"/>
                    <ToggleButton x:Name="PART_ToggleButton"
                                  Grid.Column="1"
                                  Focusable="False"
                                  KeyboardNavigation.IsTabStop="False"
                                  MinWidth="{Binding Path=ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}"
                                  IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">
                        <ToggleButton.Content>
                            <Image   Focusable="False"
                                     KeyboardNavigation.IsTabStop="False"
                                     Source="Calendar.bmp"
                                     Margin="2" />
                        </ToggleButton.Content>
                    </ToggleButton>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
  

Комментарии:

1. Код не показан. Можете ли вы предоставить меньше кода и быть более конкретным — что именно не работает

Ответ №1:

На этом компьютере нет библиотек DLL для проверки моего ответа, но согласно справке Infragistics, вы должны установить для свойства Mask значение {date}. Если я правильно отсюда понял, это должно выглядеть примерно так:

 <jkdp:XamDateTimeEditor 
                    .....
                    Mask="{}{date}"
                    ..... />
  

Если вы хотите использовать одну и ту же маску для всех элементов управления, использующих этот стиль, добавьте этот параметр в стиль:

 <Setter Property="Mask" Value="{}{date}"/>
  

Это заставит редактор использовать маску короткой даты, как определено культурой приложения. Вы можете создать свою собственную маску на основе соглашений StringFormat, описанных в пользовательских строках формата даты и времени MSDN