东莞网站推广排名,广告联盟评测,大气医院网站模板,wordpress插件 盗版概述TabControl我之前有讲过一节#xff0c;内容详见#xff1a;C# WPF TabControl用法指南(精品)#xff0c;上节主要讲解了tabcontrol控件的左右翻页#xff0c;以及页面筛选#xff0c;以及数据绑定等内容#xff0c;这节内容继续接续上节内容进行扩展讲解#xff0c…概述 TabControl我之前有讲过一节内容详见C# WPF TabControl用法指南(精品)上节主要讲解了tabcontrol控件的左右翻页以及页面筛选以及数据绑定等内容这节内容继续接续上节内容进行扩展讲解主要针对页面删除、增加以及对应的事件进行讲解.功能演示代码实现前台XAML:UserControl x:ClassCaliburn.Micro.Hello.TabControlViewxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:dxhttp://schemas.devexpress.com/winfx/2008/xaml/corexmlns:dxlchttp://schemas.devexpress.com/winfx/2008/xaml/layoutcontrolxmlns:localclr-namespace:Caliburn.Micro.Helloxmlns:calhttp://www.caliburnproject.orgmc:Ignorabled d:DesignHeight450 d:DesignWidth800 Grid Grid.RowDefinitionsRowDefinition Height35/RowDefinition HeightAuto//Grid.RowDefinitionsStackPanel Grid.Row0 Margin2 OrientationHorizontal HorizontalAlignmentRightLabel Content跳转到页: VerticalAlignmentCenter Margin5/TextBox Text{Binding PageIndex} VerticalAlignmentCenter Margin5 MinWidth50/dx:SimpleButton Content跳转 NameButton_Click Margin5//StackPaneldx:DXTabControl Grid.Row1 SelectedIndex{Binding SelectedIndex}ItemsSource{Binding ParamItems} Margin5cal:Message.Attach[Event TabAdding][DXTAB_TabAdding($source,$eventArgs)];[Event TabRemoved][DXTabControl_TabRemoved($source,$eventArgs)];[Event TabRemoving][DXTabControl_TabRemoving($source,$eventArgs)];[Event TabHiding][DXTabControl_TabHiding($source,$eventArgs)]; dx:DXTabControl.ItemHeaderTemplateDataTemplateStackPanel OrientationHorizontal!--Image Source{Binding ImageLabel}/--dxlc:LayoutItem Label{Binding Header}//StackPanel/DataTemplate/dx:DXTabControl.ItemHeaderTemplatedx:DXTabControl.ItemTemplateDataTemplateContentControl cal:View.Model{Binding SubView} //DataTemplate/dx:DXTabControl.ItemTemplatedx:DXTabControl.Viewdx:TabControlScrollView AllowHideTabItemsTrue AllowAnimationTrue NewButtonShowModeInTabPanel ShowHeaderMenuTrueAllowKeyboardNavigationTrue AllowScrollOnMouseWheelTrue RemoveTabItemsOnHidingTrue //dx:DXTabControl.View/dx:DXTabControl!--dxg:GridControl dxg:GridControl.Viewdxg:TableView AllowPagingTrue//dxg:GridControl.View/dxg:GridControl--/Grid
/UserControl这里绑定了几个事件cal:Message.Attach[Event TabAdding][DXTAB_TabAdding($source,$eventArgs)];[Event TabRemoved][DXTabControl_TabRemoved($source,$eventArgs)];[Event TabRemoving][DXTabControl_TabRemoving($source,$eventArgs)];[Event TabHiding][DXTabControl_TabHiding($source,$eventArgs)]; TabAdding是在页面添加前触发TabRemoved页面移除完成后触发TabRemoving页面移除前触发TabHiding页面隐层前触发.需要注意的是需要触发移除页面事件首先需要将属性RemoveTabItemsOnHiding设置为true。NewButtonShowMode这个属性是个枚举量设置的是添加页面按钮的位置详解如下//// 摘要:// Lists values that specify where to show the New button.[Flags]public enum NewButtonShowMode{//// 摘要:// The New Button is not shown.NoWhere 0,//// 摘要:// The New Button is shown in the Header Area.InHeaderArea 1,//// 摘要:// The New Button is located inside the Tab Panel, next to tab item headers.InTabPanel 2,//// 摘要:// The New Button is shown in the Tab Panel and Header Area simultaneously.InHeaderAreaAndTabPanel 3}后台cs代码using DevExpress.Xpf.Core;
using PropertyChanged;
using System.Collections.ObjectModel;
using System.Windows;namespace Caliburn.Micro.Hello
{[AddINotifyPropertyChangedInterface]public class TabControlViewModel : Screen, IViewModel{public ObservableCollectionParamDTO ParamItems { get; set; } new ObservableCollectionParamDTO();public int SelectedIndex { get; set; }public int PageIndex { get; set; }public TabControlViewModel(){DisplayName TabControlTest;PageIndex 3;ParamItems.Add(new ParamDTO() { Header 1, SubView new MemorandumViewModel() });ParamItems.Add(new ParamDTO() { Header 2, SubView new MemorandumViewModel() });ParamItems.Add(new ParamDTO() { Header 3, SubView new MemorandumViewModel() });ParamItems.Add(new ParamDTO() { Header 4, SubView new MemorandumViewModel() });}public void Button_Click(){SelectedIndex PageIndex - 1;}public void DXTAB_TabAdding(object sender, TabControlTabAddingEventArgs e){int currentPageCount ParamItems.Count;e.Item new ParamDTO(){Header ${currentPageCount 1},SubView new MemorandumViewModel()};}public void DXTabControl_TabRemoving(object sender, TabControlTabRemovingEventArgs e){}public void DXTabControl_TabRemoved(object sender, TabControlTabRemovedEventArgs e){for (int i 0; i ParamItems.Count; i){ParamItems[i].Header ${i 1};}}public void DXTabControl_TabHiding(object sender, TabControlTabHidingEventArgs e){if (ParamItems.Count 1){MessageBox.Show($There must be at least one of ParamDTO pages, Page Remove);e.Cancel true;}else{var confirmResult MessageBox.Show($确定删除页面,警告,MessageBoxButton.YesNo);if (confirmResult MessageBoxResult.Yes || confirmResult MessageBoxResult.OK){//to do}else{e.Cancel true;}}}}[AddINotifyPropertyChangedInterface]public class ParamDTO{/// summary/// 标题/// /summarypublic string Header { get; set; }/// summary/// SubView/// /summarypublic MemorandumViewModel SubView { get; set; }}}这里在TabHiding的事件里面设置了弹窗确认如果点了确认再删除页面点击了取消则不删除防止了用户误操作把页面删除.页面删除完成后在TabRemoved里面重新排布了页面标题序号.源码下载百度网盘链接https://pan.baidu.com/s/1LVLSb9PzOme9m0S5GSP6Ow 提取码6666