VB のたまご

作成日: 2017/03/06, 更新日: 2017/03/06



DatePicker

    イメージ
  •  DatePicker は、任意の日付を選択するコントロールです。 Calender コントロールと似ていますが、選択時のみカレンダーが表示され、未選択時は TextBox のように日付文字列のみが表示されます。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「DatePickerWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="DatePickerWindow1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="DatePickerWindow1" Height="300" Width="300">
    
        <StackPanel>
    
            <DatePicker Margin="10" />
    
        </StackPanel>
        
    </Window>
    

  •  それでは、日付を選択した時のイベント処理をみて見ましょう。

  • <Window x:Class="DatePickerWindow2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="DatePickerWindow2" Height="300" Width="300">
        
        <StackPanel>
    
            <DatePicker Margin="10" SelectedDateChanged="SelectedDateChanged" />
    
        </StackPanel>
        
    </Window>
    

    Public Class DatePickerWindow2
    
        Private Sub SelectedDateChanged(sender As Object, e As SelectionChangedEventArgs)
    
            ' Remove は、変更前の選択項目
            If 0 < e.RemovedItems.Count Then
                Console.WriteLine($"")
                For Each dt As DateTime In e.RemovedItems
                    Console.WriteLine($"{dt.ToString("yyyy/MM/dd")} remove.")
                Next
            End If
    
            ' Add は、変更後の選択項目
            If 0 < e.AddedItems.Count Then
                For Each dt As DateTime In e.AddedItems
                    Console.WriteLine($"{dt.ToString("yyyy/MM/dd")} add.")
                Next
            End If
    
        End Sub
    
    End Class
    

  •  SelectedDateChanged イベントの引数からは、変更前と変更後の値を取得することができます。これを使って、変更した値を調べています。 イベント引数名には、RemovedItems, AddedItems とありますが、ここの例では、「選択項目の削除」や「新規項目の追加」という意味ではありません。

  • スポンサーリンク


  •  Calendar コントロールと同じく、定休日等を表現する×マークや、ある範囲以外の日付を表示しないように制限をかけることも可能です。

  • <Window x:Class="DatePickerWindow3"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="DatePickerWindow3" Height="300" Width="300">
       
        <StackPanel>
    
            <DatePicker Margin="10"
                        DisplayDateStart="2/15/2017"
                        DisplayDateEnd="2/25/2017">
    
                <DatePicker.BlackoutDates>
                    <CalendarDateRange Start="2/15/2017" End="2/15/2017" />
                    <CalendarDateRange Start="2/22/2017" End="2/22/2017" />
                </DatePicker.BlackoutDates>
                
            </DatePicker>
    
        </StackPanel>
        
    </Window>