【问题标题】:Creating Silverlight UserControl创建 Silverlight 用户控件
【发布时间】:2010-01-23 04:25:41
【问题描述】:

我正在创建一个silverlight 用户控件,我应该能够通过混合进行拖放。但是这个控件需要接受一个已经在页面上的地图。

例如。

  1. Main.xaml 包含地图控件。
  2. MapEditor.xaml 包含按钮和其他控件。在 .cs 文件中,它需要访问一个地图控件(Main.xaml 中的那个)。

我该如何完成这项工作?

我正在考虑在 MapEditor 的构造函数中添加一个参数,但我如何在设计模式下将地图作为参数传递?

谢谢。

ps。我将把这个控件分解成一个 Silverlight 库,以便以后在多个项目中使用它。

【问题讨论】:

    标签: silverlight silverlight-3.0 user-controls


    【解决方案1】:

    您不想为控件提供参数化构造函数,XAML 只会使用它们的默认构造函数构造类型。

    简单方法

    最简单的方法是将 DependencyProperty 添加到您将为其分配 Map 控件的控件(在此示例中,我将使用类型名称 MyMap):-

    public MyMap Map
    {
        get { return (MyMap)GetValue(MapProperty); }
        set { SetValue(MapProperty, value); }
    }
    
    public static DependencyPropery MapProperty = new DependencyProperty("Map",
        typeof(MyMap), typeof(MapEditor), new PropertyMetaData(null));
    

    现在,在 Blend 中,Map 属性将出现在“属性”选项卡的“杂项”类别中。然后,您可以使用“创建数据绑定”的“元素属性”选项卡来选择它应该绑定到的地图控件。

    硬核方法

    也就是说,我倾向于按照这些准则 Creating a New Control by Creating a ControlTemplate 构建适当的可自定义控件。此外,我将扩展ContentControl 基类并在模板的核心包含ContentPresenter。该控件会假设子控件是MyMap 控件。

    这种方法允许在 Blend 中设置 MapEditor 控件的整个外观,并允许将要“编辑”的 Map 控件作为子控件拖放到 MapEditor 上。

    【讨论】:

    • 最后一行,函数typeof(MyControl)中的MyControl是什么?
    • @Shawn:对不起,我应该把MapEditor 放在那里以便清楚。在此参数中,您指定与依赖属性关联的控件的类型。这允许不同的控件注册同名的属性(如果没有这个,只有一个控件可能有一个“文本”属性,这是永远不会的)。我会编辑。
    • 您好,另一个问题,对于具有 Map 属性的新控件,在将地图对象传递给它方面,xaml 是什么样的?
    • @Shawn:这本身就是一个很好的问题,但是由于 Map 控件已经存在于您的 XAML 中,我猜您想绑定到它。假设您的Map 具有x:Name="MyMap"。因此,您的 Map 属性看起来像 Map="{Binding ElementName=MyMap}"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多