当前位置: 首页 > news >正文

排名好的徐州网站建设网页设计项目案例网站

排名好的徐州网站建设,网页设计项目案例网站,梨树县交通建设网站,河北建设网工程信息网#xff08;关注博主后#xff0c;在“粉丝专栏”#xff0c;可免费阅读此文#xff09; wpf的功能非常强大#xff0c;很多控件都是原生的#xff0c;但是要使用TreeViewDataGrid的组合#xff0c;就需要我们自己去封装实现。 我们需要的效果如图所示#x…关注博主后在“粉丝专栏”可免费阅读此文         wpf的功能非常强大很多控件都是原生的但是要使用TreeViewDataGrid的组合就需要我们自己去封装实现。 我们需要的效果如图所示 这2个图都是第三方控件自带的并且都是收费使用。 现在我们就用原生的控件进行封装一个。 本文源码效果如下搞了好几天的确有难度所以源码也收费便宜赚点辛苦费 功能如图所示 目前已经实现了一部分。 首先说明一下实现上面的效果有3种方法 第一种技术的选择是TreeView也就是本文的演示。 第二种技术的选择是DataGrid。 第三种技术的选择是ListView。 本文演示的是使用TreeView的实现。 1.首先建立一个wpf程序 2. 封装TreeGrid namespace TreeView.TreeDataGrid.Controls {//这里有一个骚操作就是把引用放在里面using System;using System.Collections.Specialized;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Media;public class TreeGrid : TreeView{static TreeGrid(){DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeGrid), new FrameworkPropertyMetadata(typeof(TreeGrid)));}#region ColumnMappings DependencyPropertypublic string ColumnMappings{get { return (string)GetValue(ColumnMappingsProperty); }set { SetValue(ColumnMappingsProperty, value); }}public static readonly DependencyProperty ColumnMappingsProperty DependencyProperty.Register(ColumnMappings, typeof(string), typeof(TreeGrid),new PropertyMetadata(, new PropertyChangedCallback(TreeGrid.OnColumnMappingsPropertyChanged)));private static void OnColumnMappingsPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){if (obj is TreeGrid){(obj as TreeGrid).OnColumnMappingsValueChanged();}}protected void OnColumnMappingsValueChanged(){if (!string.IsNullOrEmpty(ColumnMappings)){ResetMappingColumns(ColumnMappings);}}private void ResetMappingColumns(string mapping){GridViewColumnCollection items new GridViewColumnCollection();var columns mapping.Split(new char[] { ;, | }, StringSplitOptions.RemoveEmptyEntries);foreach (var c in columns){var index c.IndexOf(:);var title ;var name ;if (index 0){title c.Substring(0, index);name c.Substring(index 1);}else{title c;name c;}DataTemplate temp null;var res this.FindTreeResourceDataTemplate(name);if (res ! null res is DataTemplate template){temp template;}else{temp new DataTemplate();FrameworkElementFactory element null;if (items.Count 0){element new FrameworkElementFactory(typeof(TreeItemContentControl));element.SetValue(ContentControl.ContentProperty, new Binding(name));}else{element new FrameworkElementFactory(typeof(TreeGridCell));element.SetValue(ContentControl.ContentProperty, new Binding(name));}temp.VisualTree element;}var col new GridViewColumn{Width 200,Header title,CellTemplate temp,};items.Add(col);}Columns items;}#endregion#region Columns DependencyPropertypublic GridViewColumnCollection Columns{get { return (GridViewColumnCollection)GetValue(ColumnsProperty); }set { SetValue(ColumnsProperty, value); }}public static readonly DependencyProperty ColumnsProperty DependencyProperty.Register(Columns, typeof(GridViewColumnCollection), typeof(TreeGrid),new PropertyMetadata(null, new PropertyChangedCallback(TreeGrid.OnColumnsPropertyChanged)));private static void OnColumnsPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){if (obj is TreeGrid){(obj as TreeGrid).OnColumnsValueChanged();}}protected void OnColumnsValueChanged(){}#endregion#region RowHeight DependencyPropertypublic double RowHeight{get { return (double)GetValue(RowHeightProperty); }set { SetValue(RowHeightProperty, value); }}public static readonly DependencyProperty RowHeightProperty DependencyProperty.Register(RowHeight, typeof(double), typeof(TreeGrid),new PropertyMetadata(30.0, new PropertyChangedCallback(TreeGrid.OnRowHeightPropertyChanged)));private static void OnRowHeightPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){if (obj is TreeGrid){(obj as TreeGrid).OnRowHeightValueChanged();}}protected void OnRowHeightValueChanged(){}#endregion#region ShowCellBorder DependencyPropertypublic bool ShowCellBorder{get { return (bool)GetValue(ShowCellBorderProperty); }set { SetValue(ShowCellBorderProperty, value); }}public static readonly DependencyProperty ShowCellBorderProperty DependencyProperty.Register(ShowCellBorder, typeof(bool), typeof(TreeGrid),new PropertyMetadata(false, new PropertyChangedCallback(TreeGrid.OnShowCellBorderPropertyChanged)));private static void OnShowCellBorderPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){if (obj is TreeGrid){(obj as TreeGrid).OnShowCellBorderValueChanged();}}protected void OnShowCellBorderValueChanged(){}#endregion#region IconStroke DependencyPropertypublic Brush IconStroke{get { return (Brush)GetValue(IconStrokeProperty); }set { SetValue(IconStrokeProperty, value); }}public static readonly DependencyProperty IconStrokeProperty DependencyProperty.Register(IconStroke, typeof(Brush), typeof(TreeGrid),new PropertyMetadata(new SolidColorBrush(Colors.LightGray), new PropertyChangedCallback(TreeGrid.OnIconStrokePropertyChanged)));private static void OnIconStrokePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){if (obj is TreeGrid){(obj as TreeGrid).OnIconStrokeValueChanged();}}protected void OnIconStrokeValueChanged(){}#endregion#region CellBorderBrush DependencyPropertypublic Brush CellBorderBrush{get { return (Brush)GetValue(CellBorderBrushProperty); }set { SetValue(CellBorderBrushProperty, value); }}public static readonly DependencyProperty CellBorderBrushProperty DependencyProperty.Register(CellBorderBrush, typeof(Brush), typeof(TreeGrid),new PropertyMetadata(new SolidColorBrush(Colors.LightGray), new PropertyChangedCallback(TreeGrid.OnCellBorderBrushPropertyChanged)));private static void OnCellBorderBrushPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e){if (obj is TreeGrid){(obj as TreeGrid).OnCellBorderBrushValueChanged();}}protected void OnCellBorderBrushValueChanged(){}#endregionprotected override DependencyObject GetContainerForItemOverride(){return new TreeGridItem();}protected override bool IsItemItsOwnContainerOverride(object item){return item is TreeGridItem;}protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e){base.OnItemsChanged(e);}}public class TreeGridItem : TreeViewItem{public event EventHandler IconStateChanged;static TreeGridItem(){DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeGridItem), new FrameworkPropertyMetadata(typeof(TreeGridItem)));}public TreeGridItem(){this.DataContextChanged TreeGridItem_DataContextChanged;}private void TreeGridItem_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e){if (DataContext ! null DataContext is TreeItemData treeData){this.SetBinding(IsExpandedProperty, new Binding(IsExpanded) { Source treeData, Mode BindingMode.TwoWay });}}protected override void OnVisualParentChanged(DependencyObject oldParent){base.OnVisualParentChanged(oldParent);}protected override DependencyObject GetContainerForItemOverride(){return new TreeGridItem();}protected override bool IsItemItsOwnContainerOverride(object item){return item is TreeGridItem;}}/** https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/GridViewRowPresenter.cs,ace7d38fc902993d* GridViewRow里的每个元素增加了一个默认的Margin这样在设置边框的时候会比较麻烦在运行时去掉*/public class TreeGridCell : ContentControl{static TreeGridCell(){DefaultStyleKeyProperty.OverrideMetadata(typeof(TreeGridCell), new FrameworkPropertyMetadata(typeof(TreeGridCell)));}public TreeGridCell(){Loaded TreeGridCell_Loaded;}private void TreeGridCell_Loaded(object sender, RoutedEventArgs e){Loaded - TreeGridCell_Loaded;var p VisualTreeHelper.GetParent(this);if (p ! null p is FrameworkElement f f.Margin.Left 0){f.Margin new Thickness(0);}}}public static class TreeHelper{public static T FindParentT(this DependencyObject obj){var p VisualTreeHelper.GetParent(obj);if (p null){return default(T);}if (p is T tt){return tt;}return FindParentT(p);}public static T FindTreeResourceT(this FrameworkElement obj, string key){if (obj null){return default(T);}var r obj.TryFindResource(key);if (r null){r Application.Current.TryFindResource(key);}if (r ! null r is T t){return t;}var p FindParentFrameworkElement(obj);if (p ! null){return FindTreeResourceT(p, key);}return default(T);}} }3.TreeGrid.xaml ResourceDictionary xmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:localclr-namespace:TreeView.TreeDataGrid.ControlsSolidColorBrush x:KeyTreeIconStroke ColorGreenYellow /Style x:KeyTreeGridItemStyle TargetType{x:Type local:TreeGridItem}Setter PropertyForeground ValueBlack/Setter PropertyBackground ValueTransparent/Setter PropertyIsExpanded ValueTrue/Setter PropertyBorderBrush ValueWheat/Setter PropertyBorderThickness Value0,0,0,1/Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type local:TreeGridItem}StackPanelBorder NameBdBackgroundTransparentBorderBrush{TemplateBinding BorderBrush}Padding{TemplateBinding Padding}GridViewRowPresenter x:NamePART_Header Content{TemplateBinding Header} Columns{Binding PathColumns,RelativeSource{RelativeSource ModeFindAncestor,AncestorTypelocal:TreeGrid}} //BorderItemsPresenter x:NameItemsHost //StackPanelControlTemplate.TriggersTrigger PropertyIsExpanded ValuefalseSetter TargetNameItemsHost PropertyVisibility ValueCollapsed//TriggerMultiTriggerMultiTrigger.ConditionsCondition PropertyHasHeader Valuefalse/Condition PropertyWidth ValueAuto//MultiTrigger.ConditionsSetter TargetNamePART_Header PropertyMinWidth Value75//MultiTriggerMultiTriggerMultiTrigger.ConditionsCondition PropertyHasHeader Valuefalse/Condition PropertyHeight ValueAuto//MultiTrigger.ConditionsSetter TargetNamePART_Header PropertyMinHeight Value19//MultiTriggerMultiTrigger!--移动变色--MultiTrigger.ConditionsCondition PropertyIsFocused ValueFalse/Condition SourceNameBd PropertyIsMouseOver Valuetrue//MultiTrigger.ConditionsSetter PropertyBackground Value red TargetNameBd//MultiTriggerTrigger PropertyIsSelected Valuetrue!--选中的背景颜色--Setter TargetNameBd PropertyBackground ValueYellowGreen/!--Setter PropertyForeground Value{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}/--Setter PropertyForeground ValueRed//Trigger!--隔行换色--!--Trigger PropertyAlternationIndex Value0 Setter TargetNameBd PropertyBackground Valueblue //TriggerTrigger PropertyAlternationIndex Value2 Setter TargetNameBd PropertyBackground Valueblack //Trigger--!--DataTrigger Binding{Binding RelativeSource{RelativeSource AncestorTypelocal:TreeGrid}, PathColumns.Count } Value0Setter TargetNameBd PropertyBackground Value#FFD3D3D3//DataTriggerDataTrigger Binding{Binding RelativeSource{RelativeSource AncestorTypelocal:TreeGrid}, PathColumns.Count} Value2Setter TargetNameBd PropertyBackground Value#FFE6E6E6//DataTrigger--MultiTriggerMultiTrigger.ConditionsCondition PropertyIsSelected Valuetrue/Condition PropertyIsSelectionActive Valuefalse//MultiTrigger.ConditionsSetter TargetNameBd PropertyBackground Value{DynamicResource {x:Static SystemColors.ControlBrushKey}}/Setter PropertyForeground Value{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}//MultiTriggerTrigger PropertyIsEnabled ValuefalseSetter PropertyForeground Value{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}//Trigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/SetterStyle.Triggers!--隔行换色--Trigger PropertyAlternationIndex Value0 Setter PropertyBackground Value#e7e7e7 //TriggerTrigger PropertyAlternationIndex Value1 Setter PropertyBackground Value#f2f2f2 //Trigger/Style.Triggers/StyleStyle TargetType{x:Type local:TreeGridItem} BasedOn{StaticResource TreeGridItemStyle}/Style TargetType{x:Type local:TreeGridCell}Setter PropertyHorizontalContentAlignment ValueCenter/Setter PropertyVerticalContentAlignment ValueCenter/Setter PropertyBorderBrush ValueRed/Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type local:TreeGridCell}Border x:NameCellBorder Margin0,0,-0.5,0Background{TemplateBinding Background}BorderBrushRedBorderThickness0,0,0,1ContentControl Content{TemplateBinding Content}ContentTemplate{TemplateBinding ContentTemplate}HorizontalAlignment{TemplateBinding HorizontalContentAlignment}VerticalAlignment{TemplateBinding VerticalContentAlignment}SnapsToDevicePixelsTrue//Border!--BorderBrushRed下划线颜色--!--ControlTemplate.TriggersDataTrigger Binding{Binding RelativeSource{RelativeSource ModeFindAncestor,AncestorTypelocal:TreeGrid},PathShowCellBorder} ValuetrueSetter TargetNameCellBorder PropertyBorderBrush Value{Binding RelativeSource{RelativeSource ModeFindAncestor,AncestorTypelocal:TreeGrid},PathCellBorderBrush} //DataTrigger/ControlTemplate.Triggers--/ControlTemplate/Setter.Value/Setter/StyleStyle TargetType{x:Type local:TreeGrid}Setter PropertyIconStroke Value{StaticResource TreeIconStroke}/Setter PropertyItemContainerStyle Value{StaticResource {x:Type local:TreeGridItem}}/Setter PropertyTemplateSetter.ValueControlTemplate TargetType{x:Type local:TreeGrid}Border Background{TemplateBinding Background}BorderBrush{TemplateBinding BorderBrush}BorderThickness0!--最大边框--DockPanel!--标题栏--GridViewHeaderRowPresenter IsHitTestVisibleFalse Columns{TemplateBinding Columns} Height{TemplateBinding RowHeight} DockPanel.DockTop /GridViewHeaderRowPresenterItemsPresenter //DockPanel/Border/ControlTemplate/Setter.Value/Setter/Style /ResourceDictionary 4.代码很多最终的源码格式 需要源码请联系我。 本文来源 WPF组合控件TreeViewDataGrid之TreeView封装-CSDN博客
http://www.yutouwan.com/news/175127/

相关文章:

  • spark网站开发微信公众号需要开发吗
  • 天地心公司做网站怎样品牌营销策划有限公司
  • 网站怎么做移动的图片手机电影网站建设
  • 江苏建设银行网站科技网站制作
  • 网站开发的就业方向北京地区网站制作公司
  • 网站建设网站建设哪里有苏州seo公司 翼好
  • 做房地产公司网站的费用郑州管家网站托管
  • 做响应式网站设计图是多大的网站显示建设中
  • 深圳住房与建设局官方网站西安网上注册公司流程
  • 建立企业网站方案清远 网站建设
  • 葫芦岛手机网站建设郴州网络营销推广
  • 公司做网站的费用属什么用途个人网站需要什么页面
  • 上海发布官方网长沙百度快速排名优化
  • 免费空间大的网盘重庆seo计费管理
  • 做网站难还是app难网站的作用有哪些
  • 怎样提高网站收录做化妆品代理在那些网站比较多
  • 网站后台添加东西不能粘贴哈尔滨网站建设1元钱
  • 网站开发的几个步骤昆明网站建设首选公司
  • 境外网站建设wordpress文章表
  • 网站都是用什么编写的网络营销策划书2000字
  • 企业 北京 响应式网站制作文字游戏做的最好的网站
  • 男女做暖暖的视频试看网站网站推广指标
  • 网站正能量晚上不用下载进入免费网时代教育培训机构
  • wordpress 建的网站专业的网站开发团队
  • 关于网站建设的请示凡科建站登录界面
  • 关于小城镇建设网站网站界面设计如何实现功能美与形式美的统一?
  • 企业如何实现高端网站建设服务器上装wordpress
  • 网站备案由别人代网站仿制教程
  • 个人网站如何做淘宝客猪八戒网可以做网站吗
  • 盐城微信公众平台网站制作wordpress访问许可