WPF自定义控件(五)の用户控件(完结)
标签:一个 line ase use mat empty null tom efault
原文:WPF自定义控件(五)の用户控件(完结)
用户控件,WPF中是继承自UserControl的控件,我们可以在里面融合我们的业务逻辑。
示例:(一个厌恶选择的用户控件)
后端:
using iMicClassBase;
using iMicClassBase.BaseControl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace iMicClassUI.HomeToolControls
{
/**
* @控件名:HomeToolBackgroundPanel
* @功能 :切换黑板界面背景
* @作者 :tjer
* @时间 :2017.05.19
* **/
///
/// HomeToolBackgroundPanel.xaml 的交互逻辑
///
public partial class HomeToolBackgroundPanel : System.Windows.Controls.UserControl
{
#region 委托及事件
///
/// 背景改变事件委托
///
/// 源
/// 类型
/// 改变对象
public delegate void BackGroundSelectedChangeDelegate(object sender, BBBackGroundType type,object ChangeObj);
///
/// 背景改变事件
///
public BackGroundSelectedChangeDelegate BackGroundSelectedChange = null;
///
/// 选项卡改变事件
///
public static readonly RoutedEvent TabItemChangeEvent = EventManager.RegisterRoutedEvent
("TabItemChange", RoutingStrategy.Bubble, typeof(RoutedEventArgs), typeof(HomeToolBackgroundPanel));
public event RoutedEventHandler TabItemChange
{
add { AddHandler(TabItemChangeEvent, value); }
remove { RemoveHandler(TabItemChangeEvent, value); }
}
#endregion
#region 变量
///
/// 调用系统颜色框
///
private ColorDialog SysColorDia = new ColorDialog();
#endregion
#region 属性及依赖属性
///
/// 当前选项卡背景类型
///
public BBBackGroundType SelectedOption
{
get;
set;
} = BBBackGroundType.ColorType;
///
/// 当前颜色
///
public static readonly DependencyProperty CurrentColorProperty =
DependencyProperty.Register("CurrentColor", typeof(System.Windows.Media.Color), typeof(HomeToolBackgroundPanel), new PropertyMetadata((Color)ColorConverter.ConvertFromString("#FF18311B"), OnCurrentColorChanged));
[Description("当前颜色"), Browsable(false)]
public System.Windows.Media.Color CurrentColor
{
get { return (System.Windows.Media.Color)GetValue (CurrentColorProperty); }
set { SetValue(CurrentColorProperty, value); }
}
///
/// 当前本地图片背景,从1开始,默认是无效0
///
public static readonly DependencyProperty CurrentSysBgIndexProperty =
DependencyProperty.Register("CurrentSysBgIndex", typeof(int), typeof(HomeToolBackgroundPanel), new PropertyMetadata(0, OnCurrentSysBgIndexChanged));
[Description("当前系统图片背景索引"), Browsable(false)]
public int CurrentSysBgIndex
{
get { return (int)GetValue(CurrentSysBgIndexProperty); }
set { SetValue(CurrentSysBgIndexProperty ,value); }
}
///
/// 当前本地图片路径
///
public static readonly DependencyProperty CurrentLocalImageBgURIProperty =
DependencyProperty.Register("CurrentLocalImageBgURI", typeof(string), typeof(HomeToolBackgroundPanel), new PropertyMetadata(string.Empty, OnCurrentLocalImageBgURIChanged));
[Description("当前本地图片路径"), Browsable(false)]
public string CurrentLocalImageBgURI
{
get { return (string)GetValue(CurrentLocalImageBgURIProperty); }
set { SetValue(CurrentLocalImageBgURIProperty, value); }
}
#endregion
#region 窗体事件
///
/// 构造
///
public HomeToolBackgroundPanel()
{
InitializeComponent();
}
///
/// 初始化,每次显示的时候调用,可以展示当前黑板背景状态
///
/// 当前黑板背景类型
/// 背景内容对象
public void Init(BBBackGroundType type,object obj)
{
switch (type)
{
case BBBackGroundType.ColorType:
tabPanel.SelectedIndex = 0;
CurrentColor = (System.Windows.Media.Color)obj ;
break;
case BBBackGroundType.ImageType:
tabPanel.SelectedIndex = 1;
CurrentSysBgIndex = (int)obj;
break;
case BBBackGroundType.LocalType:
tabPanel.SelectedIndex = 2;
CurrentLocalImageBgURI = (string)obj;
break;
}
}
#endregion
#region 依赖事件
///
/// 颜色改变事件
///
/// 依赖对象
/// 事件
private static void OnCurrentColorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue == e.NewValue)
{
return;
}
if ((Color)e.NewValue== (Color)ColorConverter.ConvertFromString("#FF18311B"))
{
return;
}
HomeToolBackgroundPanel control = (HomeToolBackgroundPanel)d;
control.CurrentSysBgIndex = 0;
control.CurrentLocalImageBgURI = string.Empty;
control.BackGroundSelectedChange?.Invoke(control, BBBackGroundType.ColorType,control.CurrentColor);
}
///
/// 背景索引改变事件
///
/// 依赖对象
/// 事件
private static void OnCurrentSysBgIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue == e.NewValue)
{
return;
}
if ((int)e.NewValue==0)
{
return;
}
HomeToolBackgroundPanel control = (HomeToolBackgroundPanel)d;
control.CurrentColor = (Color)ColorConverter.ConvertFromString("#FF18311B");
control.CurrentLocalImageBgURI = string.Empty;
control.BackGroundSelectedChange?.Invoke(control, BBBackGroundType.ImageType, control.CurrentSysBgIndex);
}
///
/// 本地背景路径改变
///
/// 依赖对象
/// 事件
private static void OnCurrentLocalImageBgURIChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.OldValue == e.NewValue)
{
return;
}
if ((string)e.NewValue == string.Empty)
{
return;
}
HomeToolBackgroundPanel control = (HomeToolBackgroundPanel)d;
control.CurrentColor = (Color)ColorConverter.ConvertFromString("#FF18311B");
control.CurrentSysBgIndex = 0;
control.BackGroundSelectedChange?.Invoke(control, BBBackGroundType.LocalType, control.CurrentLocalImageBgURI);
}
#endregion
#region 内部操作事件
///
/// 选项卡改变事件
///
/// 事件源
/// 事件
private void TabItem_Select(object sender, RoutedEventArgs e)
{
//选项卡改变,背景类型改变
switch (tabPanel.SelectedIndex)
{
case 0:
SelectedOption = BBBackGroundType.ColorType;
break;
case 1:
SelectedOption = BBBackGroundType.ImageType;
break;
case 2:
SelectedOption = BBBackGroundType.LocalType;
break;
}
RoutedEventArgs routedEventArgs = new RoutedEventArgs(TabItemChangeEvent, e.OriginalSource);
RaiseEvent(routedEventArgs);
}
///
/// 面板颜色值选择
///
/// 事件源
/// 事件
private void ColorPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
colorPanelCurrent.Color = (sender as ColorPanel).Color;
if ((sender as ColorPanel).Color == (Color)(ColorConverter.ConvertFromString("#FF18311B"))) //保证颜色值是设定色的时候也会触发
{
btnBg1.IsSelected = false;
btnBg2.IsSelected = false;
btnBg3.IsSelected = false;
btnBg4.IsSelected = false;
CurrentSysBgIndex = 0;
CurrentLocalImageBgURI = string.Empty;
BackGroundSelectedChange?.Invoke(this, BBBackGroundType.ColorType, CurrentColor);
}
}
///
/// 点击更多颜色
///
/// 事件源
/// 事件
private void btnMoreColor_Click(object sender, RoutedEventArgs e)
{
DialogResult result = SysColorDia.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
colorPanelCurrent.Color = ColorConverterHelp.ConvertToMediaColor(SysColorDia.Color);
}
}
///
/// 本地背景选择
///
/// 事件源
/// 事件
private void SelectButton_ButtonSelected(object sender, EventArgs e)
{
int index = Convert.ToInt32((sender as SelectButton).Tag);
switch (index)
{
case 1:
btnBg2.IsSelected = false;
btnBg3.IsSelected = false;
btnBg4.IsSelected = false;
CurrentSysBgIndex = 1;
break;
case 2:
btnBg1.IsSelected = false;
btnBg3.IsSelected = false;
btnBg4.IsSelected = false;
CurrentSysBgIndex = 2;
break;
case 3:
btnBg1.IsSelected = false;
btnBg2.IsSelected = false;
btnBg4.IsSelected = false;
CurrentSysBgIndex = 3;
break;
case 4:
btnBg1.IsSelected = false;
btnBg2.IsSelected = false;
btnBg3.IsSelected = false;
CurrentSysBgIndex = 4;
break;
}
}
///
/// 点击选择本地图片
///
///
///
private void btnAddLoaclImage_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog localBg = new OpenFileDialog();
localBg.DefaultExt = ".png";
localBg.Filter = "(背景)|*.png";
if (localBg.ShowDialog() == DialogResult.OK)
{
btnBg1.IsSelected = false;
btnBg2.IsSelected = false;
btnBg3.IsSelected = false;
btnBg4.IsSelected = false;
CurrentSysBgIndex = 0;
CurrentLocalImageBgURI = System.IO.Path.GetFullPath(localBg.FileName);
}
}
#endregion
}
}
前端:
其实用户控件是我们常用的,没什么可说的,在此做个说明,只想保持博文队形整齐。
自定义控件系列博文链接:
WPF自定义控件(一)の控件分类
WPF自定义控件(二)の重写原生控件样式模板
WPF自定义控件(三)の扩展控件
WPF自定义控件(四)の自定义控件
WPF自定义控件(五)の用户控件
WPF自定义控件(五)の用户控件(完结)
标签:一个 line ase use mat empty null tom efault
原文地址:https://www.cnblogs.com/lonelyxmas/p/9941831.html
评论