问题描述
||
下面的代码在.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约定设计自己的掩码。