100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > WPF的自定义控件 依赖属性 DependencyProperty 路由事件RoutedEvent

WPF的自定义控件 依赖属性 DependencyProperty 路由事件RoutedEvent

时间:2023-09-20 13:26:39

相关推荐

WPF的自定义控件 依赖属性 DependencyProperty 路由事件RoutedEvent

起初,想添加TreeView的样式,在MouseOver时整行背景变色,但是我目前在XAML无法实现.

搜索了一下,有个方法在后台也要写代码.

参考:/bray/archive//05/01/1725457.html

用这个办法可以解决样式问题,但是不能方便的复用,就想到做成UserControl.

在UserControl里放入一个TreeView,需要 依赖属性ItemsSource 和 路由事件SelectedItemChanged

参考:/zhouyinhui/archive//10/27/939920.html

以下是我的部分代码

UCTreeView.xaml

View Code <TreeViewx:Name="treeview1"SelectedItemChanged="treeview1_SelectedItemChanged"Background="{x:Null}"/>

UCTreeView.xaml.cs

View Code #region属性依赖

publicstaticreadonlyDependencyPropertyItemsSourceProperty=

DependencyProperty.Register("ItemsSource",typeof(IEnumerable),

typeof(UCTreeView),

newPropertyMetadata(null,newPropertyChangedCallback(OnItemsSourceChanged)));

publicIEnumerableItemsSource

{

get{return(IEnumerable)GetValue(ItemsSourceProperty);}

set{SetValue(ItemsSourceProperty,value);}

}

staticvoidOnItemsSourceChanged(objectsender,DependencyPropertyChangedEventArgsargs)

{

if(sender!=null&&senderisUCTreeView)

{

UCTreeViewsource=(UCTreeView)sender;

source.treeview1.ItemsSource=(IEnumerable)args.NewValue;

}

}

#endregion

#region事件路由

publicstaticreadonlyRoutedEventSelectedItemChangedEvent=

EventManager.RegisterRoutedEvent("SelectedItemChanged",RoutingStrategy.Bubble,typeof(RoutedPropertyChangedEventHandler<object>),typeof(UCTreeView));

[Description("选择项改变后发生")]

publiceventRoutedPropertyChangedEventHandler<object>SelectedItemChanged

{

add

{

this.AddHandler(SelectedItemChangedEvent,value);

}

remove

{

this.RemoveHandler(SelectedItemChangedEvent,value);

}

}

publicvoidOnSelectedItemChanged(objectoldValue,objectnewValue)

{

RoutedPropertyChangedEventArgs<object>arg=

newRoutedPropertyChangedEventArgs<object>(oldValue,newValue,SelectedItemChangedEvent);

this.RaiseEvent(arg);

}

privatevoidtreeview1_SelectedItemChanged(objectsender,RoutedPropertyChangedEventArgs<object>e)

{

OnSelectedItemChanged((object)e.OldValue,(object)e.NewValue);

}

#endregion

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。