wpf给自定义控件定义事件

wpf给自定义控件定义事件

首先项目中添加UserControl.xaml,名称改为MyUserButton.xaml

修改xaml文件如下:

Button x:Class="UserButtonTest.MyUserButton"
             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" 
             xmlns:local="clr-namespace:UserButtonTest"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             Background="Transparent" BorderThickness="0" x:Name="dd">

    <Button.Template>
        <ControlTemplate>
            <Grid>
                <Border Name="border" BorderThickness="3" CornerRadius ="5" Background="#FFFFCC" BorderBrush="#FF6633">
                    <Border BorderThickness="0" Height="20">
                        <Viewbox VerticalAlignment="Center" HorizontalAlignment="Center">
                            <TextBlock Name="tb" Text="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Text}">ee</TextBlock>
                        </Viewbox>
                    </Border>
                </Border>
            </Grid>
        </ControlTemplate>
    </Button.Template>

</Button>

修改对应的.cs文件如下:

namespace UserButtonTest
{
    /// <summary>
    /// MyUserButton.xaml 的交互逻辑
    /// </summary>
    public partial class MyUserButton : Button
    {
        public MyUserButton()
        {
            InitializeComponent();            
        }
    }
 }

对应的.cs文件中添加Click事件

 public static readonly RoutedEvent clickEvent =
             EventManager.RegisterRoutedEvent("ClickF", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyUserButton));

        public event RoutedEventHandler ClickF
        {
            add
            {
                AddHandler(clickEvent,value);
            }

            remove
            {
                RemoveHandler(clickEvent, value);
            }
        }

        protected override void OnClick()
        {
            RoutedEventArgs args = new RoutedEventArgs(clickEvent, this);
            RaiseEvent(args);
        }

然后在MainWindow.xaml中引用这个控件

<Window x:Class="UserButtonTest.MainWindow"
        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:UserButtonTest"关键是引入这句
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
        <local:MyUserButton Width="90" Height="50" ClickF="MyUserButton_ClickF">

        </local:MyUserButton>
    </Grid>
</Window>

之后在MainWindow.cs文件中定义MyUserButton_ClickF事件

 private void MyUserButton_ClickF(object sender, RoutedEventArgs e)
 {
   MessageBox.Show("hi");
 }

效果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值