• WPF 自定义DateControl DateTime控件


    自定义日期控件,月份选择。如下是日期的一些效果图。

    具体的样式、颜色可以根据下面的代码,自己调节即可

      

    1、日期控件的界面

    <UserControl x:Class="WpfApplication10.DateSelectControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    mc:Ignorable="d" 
    d:DesignHeight="210" d:DesignWidth="200" Loaded="MonthUserControl_OnLoaded">
        <UserControl.Resources>
            <Style x:Key="LbMontyStyle" TargetType="Label">
                <Setter Property="Foreground" Value="{Binding MonthForeGround}"></Setter>
                <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
                <Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
                <Setter Property="FontSize" Value="16"></Setter>
            </Style>
            <Style x:Key="ContentControlStyle" TargetType="RadioButton">
                <Setter Property="Height" Value="39"></Setter>
                <Setter Property="Margin" Value="0.2,0"></Setter>
                <Setter Property="Width" Value="55"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="RadioButton">
                            <Grid x:Name="T_Grid">
                                <Label Content="{TemplateBinding Content}" Style="{StaticResource LbMontyStyle}"></Label>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter TargetName="T_Grid" Property="Background" Value="#FF48CDF9"></Setter>
                                </Trigger>
                                <Trigger Property="IsChecked" Value="True">
                                    <Setter TargetName="T_Grid" Property="Background" Value="DeepSkyBlue"></Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </UserControl.Resources>
        <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
            <Grid.RowDefinitions>
                <RowDefinition Height="39"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <!--年份-->
            <Button x:Name="BtnPrevious" Click="BtnPrevious_OnClick" Grid.Row="0" Grid.Column="0">
                <Button.Template>
                    <ControlTemplate>
                        <Grid x:Name="Main_Grid" VerticalAlignment="Center" HorizontalAlignment="Center" Height="26">
                            <Path x:Name="Path1" Stroke="#FF363FF3" StrokeThickness="5" Data="M0,13 20,0"></Path>
                            <Path x:Name="Path2" Stroke="#FF363FF3" StrokeThickness="5" Data="M0,11 20,24"></Path>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Trigger.Setters>
                                    <Setter TargetName="Path1" Property="Stroke" Value="#FF0A15F9"></Setter>
                                    <Setter TargetName="Path1" Property="Stroke" Value="#FF0A15F9"></Setter>
                                </Trigger.Setters>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Button.Template>
            </Button>
            <Button x:Name="BtnNext" Click="BtnNext_OnClick" Grid.Row="0" Grid.Column="2">
                <Button.Template>
                    <ControlTemplate TargetType="Button">
                        <Grid x:Name="Main_Grid" VerticalAlignment="Center" HorizontalAlignment="Center" Height="26">
                            <Path x:Name="Path1" Stroke="#FF363FF3" StrokeThickness="5" Data="M20,13 0,0"></Path>
                            <Path x:Name="Path2" Stroke="#FF363FF3" StrokeThickness="5" Data="M20,11 0,24"></Path>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Trigger.Setters>
                                    <Setter TargetName="Path1" Property="Stroke" Value="#FF0A15F9"></Setter>
                                    <Setter TargetName="Path1" Property="Stroke" Value="#FF0A15F9"></Setter>
                                </Trigger.Setters>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                   
                </Button.Template>
            </Button>
            <TextBlock x:Name="TblYear" Style="{x:Null}" Grid.Row="0" Grid.Column="1" Text="2016" FontSize="16" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
            <!--月份-->
            <RadioButton x:Name="BtnMonth1" Grid.Row="1" Grid.Column="0" Content="1月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth2" Grid.Row="1" Grid.Column="1" Content="2月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth3" Grid.Row="1" Grid.Column="2" Content="3月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth4" Grid.Row="2" Grid.Column="0" Content="4月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth5" Grid.Row="2" Grid.Column="1" Content="5月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth6" Grid.Row="2" Grid.Column="2" Content="6月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth7" Grid.Row="3" Grid.Column="0" Content="7月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth8" Grid.Row="3" Grid.Column="1" Content="8月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth9" Grid.Row="3" Grid.Column="2" Content="9月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth10" Grid.Row="4" Grid.Column="0" Content="10月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth11" Grid.Row="4" Grid.Column="1" Content="11月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
            <RadioButton x:Name="BtnMonth12" Grid.Row="4" Grid.Column="2" Content="12月" Click="ButtonMonth_OnClick" Style="{StaticResource ContentControlStyle}"></RadioButton>
        </Grid>
    </UserControl>
    View Code

    2、日期控件的后台

     public partial class DateSelectControl : UserControl
        {
            public DateSelectControl()
            {
                InitializeComponent();
            }
    
            public Brush MonthForeGround
            {
                get { return (Brush)GetValue(MonthForeGroundProperty); }
                set { SetValue(MonthForeGroundProperty, value); }
            }
    
            public static readonly DependencyProperty MonthForeGroundProperty =
            DependencyProperty.Register("MonthForeGround",
            typeof(Brush), typeof(DateSelectControl), new PropertyMetadata(Brushes.White));
    
            public DateTime Value
            {
                get { return (DateTime)GetValue(ValueProperty); }
                set
                {
                    SetValue(ValueProperty, value);
                }
            }
            public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register("Value",
            typeof(DateTime), typeof(DateSelectControl), new PropertyMetadata(DateTime.Now));
    
            private void MonthUserControl_OnLoaded(object sender, RoutedEventArgs e)
            {
                var data = new MonthUserControlModel()
                {
                    MonthForeGround = MonthForeGround,
                };
                TblYear.Text = Value.Year.ToString();
                int month = Value.Month;
                switch (month)
                {
                    case 1:
                        {
                            BtnMonth1.IsChecked = true;
                        }
                        break;
                    case 2:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 3:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 4:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 5:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 6:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 7:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 8:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 9:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 10:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 11:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                    case 12:
                        {
                            BtnMonth2.IsChecked = true;
                        } break;
                }
                this.DataContext = data;
            }
    
            private void BtnPrevious_OnClick(object sender, RoutedEventArgs e)
            {
                int month = Value.Month;
                int year = Convert.ToInt32(TblYear.Text) - 1;
                var newDate = new DateTime(year, month, 1);
                Value = newDate;
                TblYear.Text = year.ToString();
            }
    
            private void BtnNext_OnClick(object sender, RoutedEventArgs e)
            {
                int month = Value.Month;
                int year = Convert.ToInt32(TblYear.Text) + 1;
                var newDate = new DateTime(year, month, 1);
                Value = newDate;
                TblYear.Text = year.ToString();
            }
    
            private void ButtonMonth_OnClick(object sender, RoutedEventArgs e)
            {
                int year = Value.Year;
                var button = sender as RadioButton;
                int month = Convert.ToInt32(button.Content.ToString().Replace("", ""));
                var newDate = new DateTime(year, month, 1);
                Value = newDate;
            }
        }
    
        public class MonthUserControlModel
        {
            public Brush MonthForeGround { get; set; }
            public string Year { get; set; }
            public int Month { get; set; }
        }
    View Code

    3、界面引用

    一般我们通过弹窗的方式,来选择日期

        <Button x:Name="BtnDateTime" HorizontalAlignment="Center" Margin="20,0" Content="时间选择" Foreground="White" Background="#FF23C5FB" Width="80" Height="32" Click="BtnDateTime_OnClick"></Button>
        <Popup x:Name="DateTimePopup" Placement="Top" VerticalOffset="0" PopupAnimation="Fade" Width="200" Height="280" PlacementTarget="{Binding ElementName=BtnDateTime}" StaysOpen="True" IsOpen="False" AllowsTransparency="True">
            <Grid Background="CornflowerBlue">
                <Grid Margin="2">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="30"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="50"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition Width="40"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="选择月份" Foreground="DeepSkyBlue" FontSize="18" VerticalAlignment="Center" Margin="15,0"></TextBlock>
                        <Button x:Name="BtnDateTimePopupClose" ToolTip="关闭" Grid.Column="1" HorizontalAlignment="Center" Background="Transparent" VerticalAlignment="Center" Click="BtnDateTimePopupClose_OnClick">
                            <Button.Template>
                                <ControlTemplate TargetType="Button">
                                    <Grid x:Name="Main_Grid">
                                        <Path Stroke="White" StrokeThickness="3" Data="M0,0 L15,15"></Path>
                                        <Path Stroke="White" StrokeThickness="3" Data="M15,0 L0,15"></Path>
                                    </Grid>
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="IsMouseOver" Value="True">
                                            <!--<Setter TargetName="Main_Grid" Property="Background" Value="#FFE2E2E2"></Setter>-->
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Button.Template>
                        </Button>
                    </Grid>
                    <wpfApplication10:DateSelectControl Grid.Row="1" HorizontalAlignment="Center"></wpfApplication10:DateSelectControl>
                    <Button Grid.Row="2" HorizontalAlignment="Right" Margin="0,0,10,15" Content="确定" Foreground="White" Background="#FF23C5FB" Width="80" Height="32"></Button>
                </Grid>
            </Grid>
        </Popup>
    View Code

    GitHub代码下载:https://github.com/Kybs0/DateControl

  • 相关阅读:
    论文阅读笔记(四十五)【CVPR2020、AAAI2020】:Relation Feature 的应用
    论文阅读笔记(四十四)【ICCV2017】:Deeply-Learned Part-Aligned Representations for Person Re-Identification
    论文阅读笔记(四十三)【AAAI2020】:Rethinking Temporal Fusion for Video-based Person Re-identificationon Semantic and Time Aspect
    论文阅读笔记(四十二)【AAAI2019】:STA:Spatial-Temporal Attention for Large-Scale Video-based Person Re-Identification
    论文阅读笔记(四十一)【CVPR2017】:Learning Deep Context-aware Features over Body and Latent Parts for Person Re-identification
    论文阅读笔记(四十)【CVPR2017】:Human Semantic Parsing for Person Re-identification
    论文阅读笔记(三十九)【CVPR2017】:Spindle Net Person Re-identification with Human Body Region Guided Feature Decomposition and Fusion
    论文阅读笔记(三十八)【AAAI2020】:Semantics-Aligned Representation Learning for Person Re-identification
    学习笔记_SpringBoot2
    学习笔记_SpringBoot1
  • 原文地址:https://www.cnblogs.com/kybs0/p/5837924.html
Copyright © 2020-2023  润新知