起初,想添加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