因为菜单和Tab控件一起用,所以就拿出来一块写

Tab控件

  定义一个名为ViewItem类,定义Tab的属性

 1 /// <summary>
 2     /// tab  item
 3     /// </summary> 
 4     public class ViewItem
 5     {
 6         /// <summary>
 7         /// 标题
 8         /// </summary>
 9         public string Header
10         {
11             get;
12             set;
13         }
14 
15         /// <summary>
16         /// 主键名称
17         /// </summary>
18         public string KeyName
19         {
20             get;
21             set;
22         }
23 
24         /// <summary>
25         /// the show Control
26         /// </summary>
27         public object ViewControl
28         {
29             get;
30             set;
31         }
32     }

  TabControl用的是Dev的控件,所以先要引用三个Dev的DLL,分别是DevExpress.Xpf.Core,DevExpress,Xpf.Docking,DevExpress.Xpf.Layout.Core。

  新建一个UserControl,命名为MenuControl,在主窗体的Window中需要添加一下引用

1         xmlns:dxd="http://schemas.devexpress.com/winfx/2008/xaml/docking"2         xmlns:c="clr-namespace:RemindWin"
3         xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
4         Name="MainView_View"

  其中,c引用的是MenuControl所在的文件夹,因为要用到MenuControl,所以需要引用MenuControl所在的文件夹。并为窗体命名为“MainView_View”(后面用到)。

  定义一个DockPanel,在其的顶端设置菜单栏,内容放TabControl,也可以在下面放FootBar,这里省略,主窗体代码如下:

 1 <Grid x:Name="MainView">
 2         <DockPanel LastChildFill="True">
 4             <c:MenuControl DockPanel.Dock="Top" HorizontalAlignment="Left"/>
 5             <dxd:DockLayoutManager x:Name="dockManager" UseLayoutRounding="True" AllowCustomization="False">
 6                 <dxd:LayoutGroup Orientation="Vertical" >
 7                     <dxd:DocumentGroup Name="documentContainer" 
 8                                    SelectedTabIndex="{Binding SelectedTabIndex,Mode=TwoWay}"
 9                                    ItemsSource="{Binding ItemList}"
10                                    DestroyOnClosingChildren="False" 
11                                    Background="Azure"
12                                    ClosePageButtonShowMode="InActiveTabPageAndTabControlHeader">
13                         <dxd:DocumentGroup.ItemStyle>
14                             <Style TargetType="dxd:DocumentPanel">
15                                 <Setter Property="CloseCommand" Value="{Binding DataContext.CloseCommand,ElementName=MainView}" />
16                                 <Setter Property="Caption" Value="{Binding Header}"></Setter>
17                                 <Setter Property="AllowFloat" Value="False"></Setter>
18                                 <Setter Property="AllowMaximize" Value="False"></Setter>
19                             </Style>
20                         </dxd:DocumentGroup.ItemStyle>
21                         <dxd:DocumentGroup.ItemContentTemplate>
22                             <DataTemplate>
23                                 <ContentControl Content="{Binding ViewControl}"></ContentControl>
24                             </DataTemplate>
25                         </dxd:DocumentGroup.ItemContentTemplate>
26                     </dxd:DocumentGroup>
27                 </dxd:LayoutGroup>
28             </dxd:DockLayoutManager>
29         </DockPanel>
30     </Grid>

  binding了Model中的ItemList,这是Tab集合,SelectedTabIndex是所选Tab的索引,为Int型,每个Tab有一个Close事件,Binding后台代码中的CloseCommand事件,属性Caption,banding了ViewItem中的Header,每个Tab的内容ContentControl绑定了ViewItem中的ViewControl,其中需要注意Grid的Name与<Setter>里面的元素一致。

  添加主窗体的ViewModel,命名MainViewModel,定义ItemList和SelectedTabIndex(引用了SimpleMvvmToolkit)

 1         #region Properties
 2 
 3         //
 4         private ObservableCollection<ViewItem> _itemList = new ObservableCollection<ViewItem>();
 5         /// <summary>
 6         /// Tab页集合
 7         /// </summary>
 8         public ObservableCollection<ViewItem> ItemList
 9         {
10             get
11             {
12                 return _itemList;
13             }
14             set
15             {
16                 _itemList = value;
17             }
18         }
19 
20         //所选tab索引
21         private int _selectedTabIndex = 0;
22         /// <summary>
23         /// 所选tab索引
24         /// </summary>
25         public int SelectedTabIndex
26         {
27             get
28             {
29                 return _selectedTabIndex;
30             }
31             set
32             {
33                 _selectedTabIndex = value;
34                 NotifyPropertyChanged(x => x.SelectedTabIndex);
35             }
36         }
37 
38         #endregion
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-15
  • 2022-12-23
  • 2022-12-23
  • 2021-07-10
  • 2021-07-08
  • 2022-12-23
相关资源
相似解决方案