自定义控件界面
<UserControl x:Class="Dynabook.ControlLibrary.ControlLibrary.DImage0"
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:Dynabook.ControlLibrary.ControlLibrary"
mc:Ignorable="d"
d:DesignHeight="85" d:DesignWidth="148">
<Grid Width="148" Height="85"
MouseLeftButtonDown="Grid_MouseLeftButtonDown"
MouseLeftButtonUp="Grid_MouseLeftButtonUp"
>
<Image Name="Img" Source="{Binding DImageSouce}" Width="144" Height="81" Margin="0,4,4,0" Stretch="UniformToFill"/>
<CheckBox Name="Check_Img" IsChecked="{Binding DIsChecked}" Visibility="Hidden" IsTabStop="False"/>
<StackPanel Name="Icon" Width="28" Height="28" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="122,0,0,0" Visibility="Collapsed" >
<Button Name="Icon_Button" Height="28" Width="28" Margin="0,0,0,0" Style="{DynamicResource ButtonStyle1}" Background="Transparent"/>
</StackPanel>
</Grid>
</UserControl>
自定义控件后台
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;
namespace Dynabook.ControlLibrary.ControlLibrary
{
/// <summary>
/// DImage0.xaml 的交互逻辑
/// </summary>
public partial class DImage0 : UserControl
{
public DImage0()
{
InitializeComponent();
Icon_Button.Click += Icon_Button_Click;
}
/// <summary>
/// 依赖属性DImageSouce
/// </summary>
public static readonly DependencyProperty ImageProperty = DependencyProperty.Register("DImageSouce", typeof(ImageSource), typeof(DImage0), new PropertyMetadata(new PropertyChangedCallback(OnImagechanged)));
public ImageSource DImageSouce
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
private static void OnImagechanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DImage0 Instance = (DImage0)d;
Instance.Img.Source = Instance.DImageSouce;
}
/// <summary>
/// 依赖属性DIsChecked
/// </summary>
public static readonly DependencyProperty DIsCheckedProperty = DependencyProperty.Register("DIsChecked", typeof(bool), typeof(DImage0), new PropertyMetadata(new PropertyChangedCallback(OnSelectchanged)));
public bool DIsChecked
{
get { return (bool)GetValue(DIsCheckedProperty); }
set { SetValue(DIsCheckedProperty, value); }
}
private static void OnSelectchanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DImage0 Instance = (DImage0)d;
Instance.Check_Img.IsChecked = Instance.DIsChecked;
if (!Instance.DIsChecked)
{
}
else
{
}
}
/// <summary>
/// 声明路由事件
/// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
/// </summary>
public static readonly RoutedEvent ControlLoadOverEvent = EventManager.RegisterRoutedEvent("ControlLoadOverEvent", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventArgs<Object>), typeof(DImage));
/// <summary>
/// 处理各种路由事件的方法
/// </summary>
public event RoutedEventHandler ControlLoadOver
{
//将路由事件添加路由事件处理程序
add { AddHandler(ControlLoadOverEvent, value); }
//从路由事件处理程序中移除路由事件
remove { RemoveHandler(ControlLoadOverEvent, value); }
}
private void Icon_Button_Click(object sender, RoutedEventArgs e)
{
//定义传递参数
// RoutedPropertyChangedEventArgs<Object> args = new RoutedPropertyChangedEventArgs<Object>("1", "2", ControlLoadOverEvent);
RoutedEventArgs args2 = new RoutedEventArgs(ControlLoadOverEvent, this);
//引用自定义路由事件
this.RaiseEvent(args2);
}
}
}
引用此自定义控件
定位到自定义控件的命名空间,然后直接引用就行
DImage_Name_ControlLoadOver是写在调用自定义控件的窗口的.cs文件下的。
例如:
private void DImage_Name_ControlLoadOver(object sender, RoutedEventArgs e)
{
//这里就可以拿到自定义控件的button的一些属性并操作了
}