在XAML中跳出后,如何从日历文本框中删除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,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,2,0\"
                             Text=\"{Binding Path=Text,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\"
                               Text=\"{Binding Path=NullText,RelativeSource={RelativeSource TemplatedParent}}\"
                               Visibility=\"{Binding Path=Text,RelativeSource={RelativeSource TemplatedParent},Converter={StaticResource NullConverter},ConverterParameter=Visibility}\" />
                    <ToggleButton Grid.Column=\"1\"
                                  Focusable=\"False\"
                                  KeyboardNavigation.IsTabStop=\"False\"
                                  MinWidth=\"{Binding Path=ActualHeight,RelativeSource={RelativeSource Self}}\"
                                  IsChecked=\"{Binding Path=IsDropDownopen,RelativeSource={RelativeSource TemplatedParent}}\">
                        <Image Source=\"Calendar.bmp\"
                               Focusable=\"False\"
                               KeyboardNavigation.IsTabStop=\"False\"
                               Margin=\"2\" />
                    </ToggleButton>
                </Grid>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding=\"{Binding Path=Text,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,RelativeSource={RelativeSource TemplatedParent}}\"
                                             DataMode=\"{Binding Path=DataMode,RelativeSource={RelativeSource TemplatedParent}}\"
                                             InvalidValueBehavior=\"{Binding Path=InvalidValueBehavior,RelativeSource={RelativeSource TemplatedParent}}\"
                                             IsDropDownopen=\"{Binding Path=IsChecked,ElementName=PART_ToggleButton,Mode=TwoWay}\"
                                             Text=\"{Binding Path=Text,RelativeSource={RelativeSource TemplatedParent}}\"
                                             Value=\"{Binding Path=Value,RelativeSource={RelativeSource TemplatedParent}}\"
                                             ValueConstraint=\"{Binding Path=ValueConstraint,RelativeSource={RelativeSource TemplatedParent}}\"
                                             ContextMenu=\"{Binding Path=ContextMenu,RelativeSource={RelativeSource TemplatedParent}}\" />
                    <vw:CommitTextBox x:Name=\"PART_FocusSite\"
                             Grid.Column=\"0\"
                             Focusable=\"True\"
                             KeyboardNavigation.IsTabStop=\"True\"
                             MaxLength=\"10\"
                             Margin=\"0,UpdateSourceTrigger=LostFocus,Converter={StaticResource DateTimeConverter},ConverterParameter=DateFromStyle,RelativeSource={RelativeSource TemplatedParent}}\" 
                             Style=\"{StaticResource TextBox.normalStyle}\"/>
                    <ToggleButton x:Name=\"PART_ToggleButton\"
                                  Grid.Column=\"1\"
                                  Focusable=\"False\"
                                  KeyboardNavigation.IsTabStop=\"False\"
                                  MinWidth=\"{Binding Path=ActualHeight,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>
    

解决方法

        我在这台机器上没有DLL可以验证我的答案,但是根据Infragistics的帮助,您应该将Mask属性设置为{date}。如果我从这里正确理解,它应该看起来像这样:
<jkdp:XamDateTimeEditor 
                    .....
                    Mask=\"{}{date}\"
                    ..... />
如果要对使用此样式的所有控件使用相同的Mask,请将此setter添加到样式中:
<Setter Property=\"Mask\" Value=\"{}{date}\"/>
这将迫使编辑者使用应用程序区域性所定义的短日期掩码。您可以根据MSDN的“自定义日期和时间格式字符串”中说明的StringFormat约定设计自己的掩码。