zoukankan      html  css  js  c++  java
  • WPF自定义选择年月控件详解

    本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下

    封装了一个选择年月的控件,XAML代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <UserControl x:Class="SunCreate.CombatPlatform.Client.DateMonthPicker"
      Height="23" Loaded="UserControl_Loaded">
      <UserControl.Resources>
        <ResourceDictionary>
          <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/SunCreate.CombatPlatform.Client.Resources;Component/Resource/DateTimePickerResource.xaml" />
          </ResourceDictionary.MergedDictionaries>
          <Style TargetType="ToggleButton" x:Key="stlToggleButton">
            <Setter Property="Foreground" Value="White"></Setter>
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate>
                  <Border x:Name="Back" Background="Transparent" BorderThickness="0" BorderBrush="Transparent">
                    <Path Name="PathFill" Fill="#1b94e0" Width="8" Height="6" StrokeThickness="0" Data="M5,0 L10,10 L0,10 z" RenderTransformOrigin="0.5,0.5" Stretch="Fill">
                      <Path.RenderTransform>
                        <TransformGroup>
                          <ScaleTransform/>
                          <SkewTransform/>
                          <RotateTransform Angle="180"/>
                          <TranslateTransform/>
                        </TransformGroup>
                      </Path.RenderTransform>
                    </Path>
                  </Border>
                  <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                      <Setter TargetName="PathFill" Property="Fill" Value="#1b94e0"></Setter>
                      <Setter TargetName="Back" Property="Background" Value="Transparent"></Setter>
                      <Setter TargetName="Back" Property="BorderBrush" Value="Transparent"></Setter>
                    </Trigger>
                  </ControlTemplate.Triggers>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>
          <Style TargetType="ComboBox" x:Key="stlComboBox">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
            <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
            <Setter Property="Foreground" Value="Black"></Setter>
            <Setter Property="Height" Value="30"></Setter>
            <Setter Property="Margin" Value="0,0,0,0"></Setter>
            <Setter Property="Template">
              <Setter.Value>
                <ControlTemplate TargetType="ComboBox">
                  <Grid>
                    <Grid.Background>
                      <ImageBrush ImageSource="/SunCreate.CombatPlatform.Client.Resources;component/Image/Face/1比n人脸比对/输入框.png"/>
                    </Grid.Background>
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="0.7*"/>
                      <ColumnDefinition Width="0.3*" MaxWidth="30" MinWidth="18"/>
                    </Grid.ColumnDefinitions>
                    <TextBox Grid.Column="0" IsReadOnly="True" Foreground="#1ba4f6" BorderThickness="1" BorderBrush="Transparent" Text="{TemplateBinding Text}" Background="Transparent"></TextBox>
                    <Border Grid.Column="0" BorderThickness="0" Background="Transparent">
                    </Border>
                    <Border Grid.Column="1" BorderThickness="0" CornerRadius="0,1,1,0" Background="Transparent">
                      <ToggleButton Style="{StaticResource stlToggleButton}" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"></ToggleButton>
                    </Border>
                    <Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide">
                      <Border CornerRadius="1" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True" Background="Transparent">
                        <Border.Effect>
                          <DropShadowEffect Color="#1ba4f6" BlurRadius="2" ShadowDepth="0" Opacity="0.5"/>
                        </Border.Effect>
                        <ScrollViewer Margin="4,6,4,6" Style="{DynamicResource ScrollViewerStyle}" MaxHeight="{TemplateBinding MaxDropDownHeight}" SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True">
                          <!-- StackPanel 用于显示子级,方法是将 IsItemsHost 设置为 True -->
                          <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" Background="#1ba4f6"/>
                        </ScrollViewer>
                      </Border>
                    </Popup>
                  </Grid>
                </ControlTemplate>
              </Setter.Value>
            </Setter>
          </Style>
        </ResourceDictionary>
      </UserControl.Resources>
      <Grid>
        <StackPanel Orientation="Horizontal">
          <ComboBox Grid.Column ="2" Grid.Row="0" Name="cbYear" SelectionChanged="cbYear_SelectionChanged" SelectedValuePath="Text" DisplayMemberPath="Text" Height="25" Width="55" Style="{StaticResource stlComboBox}" VerticalAlignment ="Center" >
          </ComboBox>
          <TextBlock Text="年" Margin="5 0 5 0" VerticalAlignment="Center" Foreground="#1ba4f6" />
          <ComboBox Grid.Column ="2" Grid.Row="0" Name="cbMonth" SelectionChanged="cbMonth_SelectionChanged" SelectedValuePath="Text" DisplayMemberPath="Text" Height="25" Width="40" Style="{StaticResource stlComboBox}" VerticalAlignment ="Center" >
          </ComboBox>
          <TextBlock Text="月" Margin="5 0 5 0" VerticalAlignment="Center" Foreground="#1ba4f6" />
        </StackPanel>
      </Grid>
    </UserControl>

    后台代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.ComponentModel;
     
    namespace SunCreate.CombatPlatform.Client
    {
      /// <summary>
      ///
      /// </summary>
      public partial class DateMonthPicker : UserControl, INotifyPropertyChanged
      {
        private DateTime _selectedMonth;
        public static DependencyProperty selectedTimeProperty;
     
        static DateMonthPicker()
        {
          selectedTimeProperty = DependencyProperty.Register("SelectedMonth", typeof(DateTime), typeof(DateMonthPicker), new PropertyMetadata(DateTime.Now, new PropertyChangedCallback(SelectedMonthChanged)));
        }
     
        public DateMonthPicker()
        {
          InitializeComponent();
     
          int currentYear = DateTime.Now.Year;
          int currentMonth = DateTime.Now.Month;
          List<object> yearList = new List<object>();
          for (int i = currentYear - 20; i <= currentYear; i++)
          {
            yearList.Add(new { Text = i.ToString() });
          }
          cbYear.ItemsSource = yearList;
     
          cbMonth.ItemsSource = new List<object>() {
            new { Text = "1" },
            new { Text = "2" },
            new { Text = "3" },
            new { Text = "4" },
            new { Text = "5" },
            new { Text = "6" },
            new { Text = "7" },
            new { Text = "8" },
            new { Text = "9" },
            new { Text = "10" },
            new { Text = "11" },
            new { Text = "12" }};
     
          this._selectedMonth = DateTime.Now;
        }
     
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
          cbYear.SelectedValue = _selectedMonth.Year.ToString();
          cbMonth.SelectedValue = _selectedMonth.Month.ToString();
        }
     
        private static void SelectedMonthChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
          (obj as DateMonthPicker).ChangeSelect(e.NewValue);
        }
     
        private void ChangeSelect(object value)
        {
          _selectedMonth = (DateTime)value;
          cbYear.SelectedValue = _selectedMonth.Year.ToString();
          cbMonth.SelectedValue = _selectedMonth.Month.ToString();
        }
     
        public DateTime SelectedMonth
        {
          get { return (DateTime)this.GetValue(DateMonthPicker.selectedTimeProperty); }
          set { this.SetValue(DateMonthPicker.selectedTimeProperty, value); }
        }
     
        public DateTime StartDay
        {
          get
          {
            return this._selectedMonth.AddDays(1 - this._selectedMonth.Day).Date;
          }
        }
     
        public DateTime EndDay
        {
          get
          {
            return this.StartDay.AddMonths(1).AddDays(-1);
          }
        }
     
        #region INotifyPropertyChanged 成员
        public event PropertyChangedEventHandler PropertyChanged;
        private void SendPropertyChanged(String propertyName)
        {
          if (PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
     
        private void cbYear_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
          ComboBox cb = sender as ComboBox;
          if (this._selectedMonth != DateTime.MinValue && cb.SelectedValue != null)
          {
            this._selectedMonth = new DateTime(Convert.ToInt32(cb.SelectedValue), this._selectedMonth.Month, 1);
            SelectedMonth = this._selectedMonth;
          }
        }
     
        private void cbMonth_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
          ComboBox cb = sender as ComboBox;
          if (this._selectedMonth != DateTime.MinValue && cb.SelectedValue != null)
          {
            this._selectedMonth = new DateTime(this._selectedMonth.Year, Convert.ToInt32(cb.SelectedValue), 1);
            SelectedMonth = this._selectedMonth;
          }
        }
      }
    }

    效果图:

  • 相关阅读:
    PHP 使用memcached
    linux下使用yum安装 mencached
    mysql 连接字符串 CONCAT
    linux 下 apache启动、停止、重启命令
    js中push()的用法
    linux下使用yum安装mysql
    SVN服务器多个项目的权限分组管理
    yum 安装nginx
    Linux下php安装Redis安装
    使用BarcodeLib.Barcode.ASP.NET生成条形码
  • 原文地址:https://www.cnblogs.com/sjqq/p/7891256.html
Copyright © 2011-2022 走看看