WPF自定义控件创建。?

时间:2012-05-18 08:53:55

标签: c# wpf custom-controls dependency-properties

我现在正在使用WPF应用程序,我必须为DateTime Picker编写自己的自定义控件。 DateTime Picker没有任何规定来设置userdefine Date Format。

Approch是做什么的。如果有任何想法请帮助我。

由于 Arijit。


用户定义格式表示.. 在我的senarion我有一个配置文件,我有n个轴,其中日期时间将被取代,我有一个下拉列表,它将以配置文件中配置的格式显示当前日期。现在每个轴的格式为配置文件可能不同,在这种情况下,我希望日期选择器应填充当前所选轴的格式。

现在问题是我已经尝试了以下approch @Sebastian Edelmeier已经指出但是

CultureInfo ci = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name);
ci.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
ci.DateTimeFormat.DateSeparator = "/";
Thread.CurrentThread.CurrentCulture = ci; 

因为我将改变应用程序的文化更改下拉列表,这种方式是不可接受的。此外,控件是一个对话框,一旦当前线程更新它不会回复到另一种文化,我猜。

我完全陷入了时间点。

2 个答案:

答案 0 :(得分:0)

也许你可以用Binding中的StringFormat参数覆盖DatePickerTextBox的ControlTemplate。 e.g。

<Style TargetType="{x:Type DatePickerTextBox}">
   <Setter Property="Control.Template">
       <Setter.Value>
          <ControlTemplate>
              <TextBox x:Name="PART_TextBox" 
                   Text="{Binding Path=SelectedDate, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}, StringFormat=\{0:f\}}" />
              </ControlTemplate>
       </Setter.Value>
   </Setter>
</Style>

其中{0:f}是所需的字符串格式。或者,您可以使用自定义转换器来获取所需的格式。 我想这可能已经足够了,所以你不必为整个datepicker覆盖controltemplate

答案 1 :(得分:-1)

如果您想要所有功能并且只更改描述日期的方式,您只需编辑您的CultureInfo:

 CultureInfo ci = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name);
 ci.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
 ci.DateTimeFormat.DateSeparator = "/";
 Thread.CurrentThread.CurrentCulture = ci;

这应该可以解决问题。