2009-02-18 11 views

उत्तर

41

कृपया ध्यान दें: निम्नलिखित उत्तर केवल 3.5 फ्रेमवर्क के तहत WPF पर लागू होता है क्योंकि नेट 4.0 रनटाइम के पास यह datetime control है।

डिफ़ॉल्ट रूप से WPF 3.5 Winforms जैसे डेट टाइम पिकर के साथ नहीं आता है।

हालांकि माइक्रोसॉफ्ट द्वारा उत्पादित WPF tool kit में एक दिनांक पिकर जोड़ा गया है जो downloaded here हो सकता है। मुझे लगता है कि यह भविष्य की रिलीज में ढांचे का हिस्सा बन जाएगा।

WPFToolkit.dll का संदर्भ जोड़ना आसान है, इसे टूल बॉक्स में देखें और वेबसाइट पर निर्देशों का पालन करके अपने आवेदन के साथ वितरित करें।

इससे पहले कि यह उपलब्ध था अन्य लोगों ने तीसरे पक्ष के पिकर्स (जिन्हें आप पसंद कर सकते हैं) बनाया था या वैकल्पिक रूप से एक WPF अनुप्रयोग में Winforms नियंत्रण का उपयोग करने के कम आदर्श समाधान का उपयोग किया था।

अद्यतन: यह बहुत सवाल बहुत this one जो भी अन्य लिंक के साथ एक walk through for the datepicker लिए एक लिंक है समान है।

+0

बस एक छोटी सावधानी है कि टूलकिट अभी तक उत्पादन के लिए तैयार नहीं है: http://www.codeplex.com/wpf/Wiki/View.aspx?title=VSM%20Memory%20Leak – Adrian

+0

स्ट्राइक - यह था जनवरी में फिर से रिलीज में तय किया गया। – Adrian

+22

आप तारीख पिकर को डेटटाइम पिकर नहीं दे रहे हैं। मुझे यह डब्ल्यूपीएफ टूलकिट अस्वस्थता में नहीं लगता है। – HAdes

3

WPF के लिए बॉक्स दिनांक समय पिकर का कोई बाहर नहीं है ..

हैं लेकिन पाठ्यक्रम :) का तृतीय पक्ष दिनांक समय पिकर का एक बहुत

http://www.devcomponents.com/dotnetbar-wpf/WPFDateTimePicker.aspx

http://marlongrech.wordpress.com/2007/09/11/wpf-datepicker/

http://www.codeplex.com/AvalonControlsLib

बस और जानने के लिए एक त्वरित Google करें!

6

यह सिर्फ में आया था;)

वहाँ WPF के लिए एक नया DatePicker वर्ग .NET 4.0 क्रम में है: http://msdn.microsoft.com/en-us/library/system.windows.controls.datepicker.aspx

भी देखें "क्या WPF में नई 'अधिक अच्छा सुविधाओं के लिए: http://msdn.microsoft.com/en-us/library/bb613588.aspx

+2

WPF से डेटपिकर नियंत्रण समय घटक का समर्थन नहीं करता है, लेकिन विस्तारित WPF टूलकिट से डेटटाइम पिकर इसका समर्थन करता है (मैं इसका उपयोग कर रहा हूं) – surfen

0

डब्ल्यूपीएफ टूल किट में डेटपिकर है, लेकिन मैंने डब्ल्यूपीएफ टूलकिट में डेटटाइम पिकर नहीं देखा है। इसलिए मुझे नहीं पता कि डेटटाइम पिकर नियंत्रण किस तरह के बारे में बात कर रहा है।

2

डब्ल्यूपीएफ विस्तारित WPF टूलकिट रिलीज 1.4 में एम्बेडेड नियंत्रणों के लिए।0, देखें http://elegantcode.com/2011/04/08/extended-wpf-toolkit-release-1-4-0/

कैलेंडर & DatePicker पूर्वाभ्यास देखें के लिए, http://windowsclient.net/wpf/wpf35/wpf-35sp1-toolkit-calendar-datepicker-walkthrough.aspx

और तुम देखो cutomize और माइक्रोसॉफ्ट एक्सप्रेशन स्टूडियो द्वारा महसूस कर सकते हैं [Use Edit Template option] नमूना यहाँ पता चलता है: करने के लिए नामस्थान निम्नलिखित

जोड़ें xaml पेज

xmlns:toolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit.Extended" 
xmlns:Microsoft_Windows_Controls_Core_Converters="clr-namespace:Microsoft.Windows.Controls.Core.Converters;assembly=WPFToolkit.Extended" 
xmlns:Microsoft_Windows_Controls_Chromes="clr-namespace:Microsoft.Windows.Controls.Chromes;assembly=WPFToolkit.Extended" 

अनुवर्ती जोड़ें पृष्ठ/खिड़की संसाधनों

<!--DateTimePicker Customized Style--> 
     <Style x:Key="DateTimePickerStyle1" TargetType="{x:Type toolkit:DateTimePicker}"> 
      <Setter Property="TimeWatermarkTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <ContentControl Content="{Binding}" Foreground="Gray" Focusable="False"/> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="WatermarkTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <ContentControl Content="{Binding}" Foreground="Gray" Focusable="False"/> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type toolkit:DateTimePicker}"> 
         <Border> 
          <Grid> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 

            <toolkit:DateTimeUpDown AllowSpin="{TemplateBinding AllowSpin}" 
                    BorderThickness="1,1,0,1" 
                    FormatString="{TemplateBinding FormatString}" 
                    Format="{TemplateBinding Format}" 
                    ShowButtonSpinner="{TemplateBinding ShowButtonSpinner}" 
                    Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" 
                    WatermarkTemplate="{TemplateBinding WatermarkTemplate}" 
                    Watermark="{TemplateBinding Watermark}" 
                    Foreground="#FFEFE3E3" 
                    BorderBrush="#FFEBB31A"> 
             <toolkit:DateTimeUpDown.Background> 
              <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
               <GradientStop Color="Black" Offset="0"/> 
               <GradientStop Color="#FF2F2828" Offset="1"/> 
              </LinearGradientBrush> 
             </toolkit:DateTimeUpDown.Background> 
            </toolkit:DateTimeUpDown> 

            <ToggleButton x:Name="_calendarToggleButton" 
                Background="{x:Null}" Grid.Column="1" IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}}"> 
             <ToggleButton.IsHitTestVisible> 
              <Binding Path="IsOpen" RelativeSource="{RelativeSource TemplatedParent}"> 
               <Binding.Converter> 
                <Microsoft_Windows_Controls_Core_Converters:InverseBoolConverter/> 
               </Binding.Converter> 
              </Binding> 
             </ToggleButton.IsHitTestVisible> 
             <ToggleButton.Style> 
              <Style TargetType="{x:Type ToggleButton}"> 
               <Setter Property="Template"> 
                <Setter.Value> 
                 <ControlTemplate TargetType="{x:Type ToggleButton}"> 
                  <Grid SnapsToDevicePixels="True"> 
                   <Microsoft_Windows_Controls_Chromes:ButtonChrome x:Name="ToggleButtonChrome" CornerRadius="0,2.75,2.75,0" InnerCornerRadius="0,1.75,1.75,0" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" BorderBrush="{x:Null}"> 
                    <Microsoft_Windows_Controls_Chromes:ButtonChrome.Background> 
                     <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0"> 
                      <GradientStop Color="#FFF3F3F3" Offset="1"/> 
                      <GradientStop Color="#7FC0A112"/> 
                     </LinearGradientBrush> 
                    </Microsoft_Windows_Controls_Chromes:ButtonChrome.Background> 
                   </Microsoft_Windows_Controls_Chromes:ButtonChrome> 
                   <Grid> 
                    <Grid.ColumnDefinitions> 
                     <ColumnDefinition Width="*"/> 
                     <ColumnDefinition Width="Auto"/> 
                    </Grid.ColumnDefinitions> 
                    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Stretch"/> 
                    <Grid x:Name="arrowGlyph" Grid.Column="1" IsHitTestVisible="False" Margin="5"> 
                     <Path Data="M0,1C0,1 0,0 0,0 0,0 3,0 3,0 3,0 3,1 3,1 3,1 4,1 4,1 4,1 4,0 4,0 4,0 7,0 7,0 7,0 7,1 7,1 7,1 6,1 6,1 6,1 6,2 6,2 6,2 5,2 5,2 5,2 5,3 5,3 5,3 4,3 4,3 4,3 4,4 4,4 4,4 3,4 3,4 3,4 3,3 3,3 3,3 2,3 2,3 2,3 2,2 2,2 2,2 1,2 1,2 1,2 1,1 1,1 1,1 0,1 0,1z" Fill="#FF82E511" Height="4" Width="7"/> 
                    </Grid> 
                   </Grid> 
                  </Grid> 
                 </ControlTemplate> 
                </Setter.Value> 
               </Setter> 
              </Style> 
             </ToggleButton.Style> 
            </ToggleButton> 
           </Grid> 

           <Popup IsOpen="{Binding IsChecked, ElementName=_calendarToggleButton}" StaysOpen="False"> 
            <Border BorderThickness="1" Padding="3"> 
             <Border.BorderBrush> 
              <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
               <GradientStop Color="#FFA3AEB9" Offset="0"/> 
               <GradientStop Color="#FF8399A9" Offset="0.375"/> 
               <GradientStop Color="#FF718597" Offset="0.375"/> 
               <GradientStop Color="#FFD2C217" Offset="1"/> 
              </LinearGradientBrush> 
             </Border.BorderBrush> 
             <Border.Background> 
              <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
               <GradientStop Color="White" Offset="0"/> 
               <GradientStop Color="#FFE9B116" Offset="1"/> 
              </LinearGradientBrush> 
             </Border.Background> 
             <StackPanel Background="{x:Null}"> 
              <Calendar x:Name="Part_Calendar" BorderThickness="0" DisplayDate="2011-06-28" Background="#7FE0B41A"/> 
              <toolkit:TimePicker x:Name="Part_TimeUpDown" Format="ShortTime" Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" WatermarkTemplate="{TemplateBinding TimeWatermarkTemplate}" Watermark="{TemplateBinding TimeWatermark}" Background="{x:Null}" Style="{DynamicResource TimePickerStyle1}"/> 
             </StackPanel> 
            </Border> 
           </Popup> 
          </Grid> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="TimePickerStyle1" 
       TargetType="{x:Type toolkit:TimePicker}"> 
      <Setter Property="WatermarkTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <ContentControl Content="{Binding}" Foreground="Gray" Focusable="False"/> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type toolkit:TimePicker}"> 
         <Border> 
          <Grid> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 
            <Grid> 
             <toolkit:DateTimeUpDown x:Name="PART_TimeUpDown" AllowSpin="{TemplateBinding AllowSpin}" BorderThickness="1,1,0,1" FormatString="{TemplateBinding FormatString}" ShowButtonSpinner="{TemplateBinding ShowButtonSpinner}" Value="{Binding Value, RelativeSource={RelativeSource TemplatedParent}}" WatermarkTemplate="{TemplateBinding WatermarkTemplate}" Watermark="{TemplateBinding Watermark}" Background="#7FE0B41A" BorderBrush="#FFF9F2F2"> 
              <toolkit:DateTimeUpDown.Format> 
               <TemplateBinding Property="Format"> 
                <TemplateBinding.Converter> 
                 <Microsoft_Windows_Controls_Core_Converters:TimeFormatToDateTimeFormatConverter/> 
                </TemplateBinding.Converter> 
               </TemplateBinding> 
              </toolkit:DateTimeUpDown.Format> 
             </toolkit:DateTimeUpDown> 
            </Grid> 
            <ToggleButton x:Name="_timePickerToggleButton" Grid.Column="1" IsChecked="{Binding IsOpen, RelativeSource={RelativeSource TemplatedParent}}" > 
             <ToggleButton.IsHitTestVisible> 
              <Binding Path="IsOpen" RelativeSource="{RelativeSource TemplatedParent}"> 
               <Binding.Converter> 
                <Microsoft_Windows_Controls_Core_Converters:InverseBoolConverter/> 
               </Binding.Converter> 
              </Binding> 
             </ToggleButton.IsHitTestVisible> 
             <ToggleButton.Style> 
              <Style TargetType="{x:Type ToggleButton}"> 
               <Setter Property="Template"> 
                <Setter.Value> 
                 <ControlTemplate TargetType="{x:Type ToggleButton}"> 
                  <Grid SnapsToDevicePixels="True"> 
                   <Microsoft_Windows_Controls_Chromes:ButtonChrome x:Name="ToggleButtonChrome" CornerRadius="0,2.75,2.75,0" InnerCornerRadius="0,1.75,1.75,0" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"/> 
                   <Grid> 
                    <Grid.ColumnDefinitions> 
                     <ColumnDefinition Width="*"/> 
                     <ColumnDefinition Width="Auto"/> 
                    </Grid.ColumnDefinitions> 
                    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="Stretch" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Stretch"/> 
                    <Grid x:Name="arrowGlyph" Grid.Column="1" IsHitTestVisible="False" Margin="5"> 
                     <Path Data="M0,1C0,1 0,0 0,0 0,0 3,0 3,0 3,0 3,1 3,1 3,1 4,1 4,1 4,1 4,0 4,0 4,0 7,0 7,0 7,0 7,1 7,1 7,1 6,1 6,1 6,1 6,2 6,2 6,2 5,2 5,2 5,2 5,3 5,3 5,3 4,3 4,3 4,3 4,4 4,4 4,4 3,4 3,4 3,4 3,3 3,3 3,3 2,3 2,3 2,3 2,2 2,2 2,2 1,2 1,2 1,2 1,1 1,1 1,1 0,1 0,1z" Fill="Black" Height="4" Width="7"/> 
                    </Grid> 
                   </Grid> 
                  </Grid> 
                 </ControlTemplate> 
                </Setter.Value> 
               </Setter> 
              </Style> 
             </ToggleButton.Style> 
            </ToggleButton> 
           </Grid> 

           <Popup IsOpen="{Binding IsChecked, ElementName=_timePickerToggleButton}" StaysOpen="False"> 
            <Border BorderThickness="1"> 
             <Border.Background> 
              <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
               <GradientStop Color="White" Offset="0"/> 
               <GradientStop Color="#FFE7C857" Offset="1"/> 
              </LinearGradientBrush> 
             </Border.Background> 
             <Border.BorderBrush> 
              <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
               <GradientStop Color="#FFA3AEB9" Offset="0"/> 
               <GradientStop Color="#FF8399A9" Offset="0.375"/> 
               <GradientStop Color="#FF718597" Offset="0.375"/> 
               <GradientStop Color="#FF617584" Offset="1"/> 
              </LinearGradientBrush> 
             </Border.BorderBrush> 

             <Grid> 
              <ListBox x:Name="PART_TimeListItems" BorderThickness="0" DisplayMemberPath="Display" Height="130" Width="150" Background="#7FE0B41A"> 
               <ListBox.ItemContainerStyle> 
                <Style TargetType="{x:Type ListBoxItem}"> 
                 <Setter Property="Template"> 
                  <Setter.Value> 
                   <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
                    <Border x:Name="Border" SnapsToDevicePixels="True"> 
                     <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Margin="4"/> 
                    </Border> 
                    <ControlTemplate.Triggers> 
                     <Trigger Property="IsMouseOver" Value="True"> 
                      <Setter Property="Background" TargetName="Border" Value="#FFE7F5FD"/> 
                     </Trigger> 
                     <Trigger Property="IsSelected" Value="True"> 
                      <Setter Property="Background" TargetName="Border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
                      <Setter Property="Foreground" Value="White"/> 
                     </Trigger> 
                    </ControlTemplate.Triggers> 
                   </ControlTemplate> 
                  </Setter.Value> 
                 </Setter> 
                </Style> 
               </ListBox.ItemContainerStyle> 
              </ListBox> 
             </Grid> 
            </Border> 
           </Popup> 
          </Grid> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

और विंडो में आप

धन्यवाद के रूप में शैली का उपयोग कर सकते हैं,

1

मुझे नहीं लगता कि यह DateTimePicker उल्लेख किया गया है से पहले:

A WPF DateTimePicker That Works Like the One in Winforms

वह वीबी में है और इसमें कुछ कीड़े हैं। मैंने इसे सी # में परिवर्तित कर दिया और new version with bug fixes बनाया।

DateTimePicker

नोट: मैं इतना WPFToolkit में कैलेंडर नियंत्रण का इस्तेमाल किया है कि मैं .NET 3.5 के बजाय नेट 4. आप .NET 4 का उपयोग कर रहे हैं, तो बस XAML में संदर्भ के लिए "wpftc" को दूर इस्तेमाल कर सकते हैं ।

संबंधित मुद्दे