首页 > 其他 > 详细

自定义控件.DateTimePicker_02

时间:2019-09-25 21:54:20      阅读:104      评论:0      收藏:0      [点我收藏+]

ZC:踩坑过程在 后面

1、在 Generic.xaml 中添加内容

<ResourceDictionary
    x:Class="WpfCustomControlLibrary_DateTimePicker.Themes.Generic"  <!--ZC: 如果有事件触发的话,需要加这一句-->
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfCustomControlLibrary_DateTimePicker">
    <Style TargetType="{x:Type local:DateTimePickerZ}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:DateTimePickerZ}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">



                        <!-- ZC: 这里面的部分是 自己添加的,外层的是 原来的 -->
                        <!-- ZC: Calendar 貌似要到 .net4.0才有 ? -->
                        <StackPanel>
                            <Calendar x:Name="calendar1" HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="1" BorderBrush="Black"/>
                            <Border x:Name="border1" HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="1" BorderBrush="Black" Background="Transparent" Margin="0,-3,0,0" >
                                <StackPanel Orientation="Horizontal">
                                    <StackPanel Orientation="Horizontal">
                                        <TextBox Text="{Binding Hour, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" 
                                                 MinWidth="20" MaxLength="2" InputMethod.IsInputMethodEnabled="False" VerticalAlignment="Center" Background="Transparent"
                                                 TextWrapping="NoWrap" FontSize="12" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" BorderBrush="Transparent" />
                                        <Label VerticalAlignment="Center" Content=":" FontSize="12" />
                                        <TextBox Text="{Binding Minute, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" 
                                                 MinWidth="20" MaxLength="2" InputMethod.IsInputMethodEnabled="False" VerticalAlignment="Center" Background="Transparent"
                                                 TextWrapping="NoWrap" FontSize="12" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" BorderBrush="Transparent"/>
                                        <Label VerticalAlignment="Center" Content=":" FontSize="12" />
                                        <TextBox Text="{Binding Second, Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" 
                                                 MinWidth="20" MaxLength="2" InputMethod.IsInputMethodEnabled="False" VerticalAlignment="Center" Background="Transparent"
                                                 TextWrapping="NoWrap" FontSize="12" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" BorderBrush="Transparent"/>
                                    </StackPanel>


                                    <Grid VerticalAlignment="Stretch">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="50*"></RowDefinition>
                                            <RowDefinition Height="50*"></RowDefinition>
                                        </Grid.RowDefinitions>
                                        <Button Grid.Row="0"  VerticalAlignment="Stretch" Width="30" x:Name="btnUp">
                                            <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 8 L 5 0 L 10 8 Z">
                                                <Path.Fill>
                                                    <SolidColorBrush Color="Black" />
                                                </Path.Fill>
                                            </Path>
                                        </Button>
                                        <Button Grid.Row="1" VerticalAlignment="Stretch" Width="30" Click="Click_Down">
                                            <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 5 8 L 10 0 Z" Margin="0,1,0,0">
                                                <Path.Fill>
                                                    <SolidColorBrush Color="Black" />
                                                </Path.Fill>
                                            </Path>
                                        </Button>
                                    </Grid>

                                    <Button  Margin="0,0,0,0" VerticalAlignment="Stretch" Width="36" BorderBrush="Black">
                                        <Path HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 8 L 5 0 L 10 8" Margin="2,4,0,0" Stroke="Black" StrokeThickness="4" />
                                    </Button>
                                </StackPanel>
                            </Border>
                        </StackPanel>
                        
                        
                        
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

 

2、在 Themes文件夹中添加 类Generic.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace WpfCustomControlLibrary_DateTimePicker.Themes
{
    partial class Generic// ZC: 与Generic.xaml关联的话,需要加上关键字"partial"
    {
        void Click_Down(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Click_Down(...)");
            MessageBox.Show("Click_Down(...)");
        }

    }// class
    
}

 

3、ZC:之前 不知道 怎么在Generic.xaml里面弄 类似 按钮事件的代码。查到说,添加类 写事件代码,然后要在 Generic.xaml中的ResourceDictionary节点添加 "x:Class"属性,老是提示 错误(忘了具体是什么了...),然后还 又添加了 一个别的什么属性,但是 还是出错,搞不定。搜来搜去也找不到太多关于这个的知识点...

 3.1、找到了这一篇文章:ControlTemplate的ResourceDictionary中的WPF事件 - 代码日志.html(https://codeday.me/bug/20180705/189758.html

ResourceDictionary可以像Windows等一样在后面的代码,所以你可以添加一个事件处理程序,并从那里调用DragMove
设置后面的代码需要几个步骤。

>如果您的ResourceDictionary被称为MetroStyleResourceDictionary.xaml,则可以在Visual Studio中的同一文件夹中添加一个名为MetroStyleResourceDictionary.xaml.cs的新文件
>文件后面的代码应该是这样的
public partial class MetroStyleResourceDictionary
{
    //...
}
>之后,您需要将x:Class属性添加到Xaml文件
<ResourceDictionary x:Class="YourNamespace.MetroStyleResourceDictionary"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!--...-->
</ResourceDictionary>
现在,您可以为MouseLeftButtonDown的dragRectangle添加一个事件处理程序。您还需要抓住“窗口”,使其成为一个很好的主意
<Rectangle Name="dragRectangle"
           MouseLeftButtonDown="dragRectangle_MouseLeftButtonDown"
           Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
           .../>
最后,您可以将事件处理程序添加到文件后面的代码中,如下所示
public partial class MetroStyleResourceDictionary
{
    void dragRectangle_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        Rectangle dragRectangle = sender as Rectangle;
        Window window = dragRectangle.Tag as Window;
        if (window != null)
        {
            window.DragMove();
        }
    }
}

 

4、

5、

 

自定义控件.DateTimePicker_02

原文:https://www.cnblogs.com/csskill/p/11587569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!