【前言】
近日,由于要做一个代码生成器(-----为什么我一直都在做这个?),我打算在主界面上面铺一个tab控件,然后每一个自定义控件都继承一个ITabPage的标签页父类,便于调用,但是搜索网上无果,捣鼓之后发现继承也并非不可以。
首先,请自定义一个父类,我这里定义了这个东西(在另一个项目EBaseUI下面):
using System;
using ;
using ;
using ;
using ;
namespace EBaseUI
{
public class ITabPage :UserControl
{
}
}
ok,现在我们就在主项目里添加一个用户控件,然后改写一下继承自定义控件:
xaml代码:
<local:ITabPage x:Class=""
xmlns="/winfx/2006/xaml/presentation"
xmlns:x="/winfx/2006/xaml"
xmlns:mc="/markup-compatibility/2006"
xmlns:d="/expression/blend/2008"
mc:Ignorable="d"
xmlns:local="clr-namespace:EBaseUI;assembly=EBaseUI"
="NearestNeighbor"
d:DesignHeight="600" d:DesignWidth="800">
<Grid>
<Grid>
<>
<RowDefinition Height="79*" />
<RowDefinition Height="116*" />
<RowDefinition Height="405*" />
</>
<StackPanel Name="stackPanel1" Orientation="Horizontal" >
<Menu Background="{x:Null}">
<MenuItem Header="添加" Padding="16,0,0,0" Margin="0,1,5,1">
<>
<ImageBrush ImageSource="/WPFCodeGen;component/resources/" Stretch="None" AlignmentX="Left"></ImageBrush>
</>
</MenuItem>
<MenuItem Header="编辑" Padding="16,0,0,0" Margin="0,1,5,1">
<>
<ImageBrush ImageSource="/WPFCodeGen;component/resources/" Stretch="None" AlignmentX="Left"></ImageBrush>
</>
</MenuItem>
<MenuItem Header="保存" Padding="16,0,0,0" Margin="0,1,5,1">
<>
<ImageBrush ImageSource="/WPFCodeGen;component/resources/" Stretch="None" AlignmentX="Left"></ImageBrush>
</>
</MenuItem>
<MenuItem Header="取消" Padding="16,0,0,0" Margin="0,1,5,1">
<>
<ImageBrush ImageSource="/WPFCodeGen;component/resources/" Stretch="None" AlignmentX="Left"></ImageBrush>
</>
</MenuItem>
</Menu>
</StackPanel>
</Grid>
</Grid>
</local:ITabPage>
cs代码:
using System;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
using EBaseUI;
namespace
{
/// <summary>
/// 的交互逻辑
/// </summary>
public partial class ConnMgr :
{
public ConnMgr()
{
InitializeComponent();
}
}
}
有几点要注意:
local这个前缀必须在 xaml头部定义:
xmlns:local="clr-namespace:EBaseUI;assembly=EBaseUI"
这里定义的是要引用到的项目。
local:ITabPage 表示 EBaseUI下面的ITabPage类。
x:Class=""
上面这一行表示这个xaml代码对应的类是 ,听说,xmal前台代码与后台cs代码会被编译到同一个文件类里面。
ok,大功告成。