【发布时间】:2009-08-19 01:45:12
【问题描述】:
如何在 .xaml 文件中为单独的 Silverlight 页面类指定公共基类?我有一些想要跨页面共享的通用属性,但如果不在每次生成 .g.cs 文件时手动更改基类,我不知道该怎么做。
这可能吗?我认为这是可能的,因为例如 Toolkit 中的 ChildControl 派生自不同的类。我是否忽略了一些明显的东西?
【问题讨论】:
如何在 .xaml 文件中为单独的 Silverlight 页面类指定公共基类?我有一些想要跨页面共享的通用属性,但如果不在每次生成 .g.cs 文件时手动更改基类,我不知道该怎么做。
这可能吗?我认为这是可能的,因为例如 Toolkit 中的 ChildControl 派生自不同的类。我是否忽略了一些明显的东西?
【问题讨论】:
默认情况下,所有 Silverlight“页面”实际上都是从 UserControl 派生的。所以,这就是你需要做的。简单的示例,当然您可能想要声明 Dependency 属性、事件等。
1.使用公共属性创建您的类
public class YourUserControlBase : UserControl
{
public bool SomeProperty {get; set; }
}
2.创建/修改页面的 XAML
为包含新基类的本地程序集和命名空间添加 XML 命名空间,并记住将 x:Class 属性保留在文件顶部,但将 UserControl 根元素修改为本地名称
这是我更新的文件:
<local:YourUserControlBase
xmlns:local="clr-namespace:SilverlightApplication1"
x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
修改代码隐藏
(Page.xaml.cs 文件,而不是自动生成的文件)从YourUserControlBase 正确继承:
public partial class MainPage : YourUserControlBase
{
public MainPage()
{
InitializeComponent();
}
}
应该是这样的!祝你好运。
【讨论】:
public class ViewBase<T> : UserControl where T : ViewModelBase {}public class MyView : ViewBase<MyViewModel> {}
另外:当您的基类在其他程序集(项目)中时,您可以这样做:
xmlns:Custom="clr-namespace:SilverlightApplication1;assembly=[Other.Assembly]"
【讨论】: