【问题标题】:How do you specify a different base class in .xaml files (Silverlight)?如何在 .xaml 文件 (Silverlight) 中指定不同的基类?
【发布时间】:2009-08-19 01:45:12
【问题描述】:

如何在 .xaml 文件中为单独的 Silverlight 页面类指定公共基类?我有一些想要跨页面共享的通用属性,但如果不在每次生成 .g.cs 文件时手动更改基类,我不知道该怎么做。

这可能吗?我认为这是可能的,因为例如 Toolkit 中的 ChildControl 派生自不同的类。我是否忽略了一些明显的东西?

【问题讨论】:

    标签: silverlight inheritance


    【解决方案1】:

    默认情况下,所有 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();
        }
    }
    

    应该是这样的!祝你好运。

    【讨论】:

    • 嘿,谢谢!我最初认为,'有趣的是,他与开发人员分享了他的名字......' ;-)。也喜欢自动完成功能。我刚刚构建了一个自定义模板控件,让我的老板流口水,所以谢谢。不过我把功劳拿了=)
    • 另外,如果你们没有要添加的功能并且想要添加一个比它更有价值的功能......我正在寻找类似的东西:x:BaseClass="Namespace.YourUserControlBase"再次感谢!
    • XAML 兼容性是一个艰难的问题,因为它已经存在,但是我听到了你的声音 - 我会分享反馈。很高兴为您提供帮助!
    • 有没有办法用一个通用的基类来做到这一点?即public class ViewBase&lt;T&gt; : UserControl where T : ViewModelBase {}public class MyView : ViewBase&lt;MyViewModel&gt; {}
    • 为了更完整:你能提供基本 UC 的 XAML 吗?
    【解决方案2】:

    另外:当您的基类在其他程序集(项目)中时,您可以这样做:

    xmlns:Custom="clr-namespace:SilverlightApplication1;assembly=[Other.Assembly]"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多