2010-01-23 169 views
1

我創建了一個Silverlight用戶控件,我應該可以通過混合拖放操作。但是這個控件需要接受已經在頁面上的地圖。創建Silverlight用戶控件

例如,

  1. Main.xaml包含一個地圖控件。
  2. MapEditor.xaml包含按鈕和其他控件。在.cs文件中,它需要訪問地圖控件(Main.xaml中的一個)。

我該如何着手完成這項工作?

我在考慮在MapEditor的構造函數中添加一個參數,但是如何在設計模式下將地圖作爲參數傳入?

謝謝。

ps。我打算將這個控件分解成一個Silverlight庫,以便稍後可以在多個項目中使用它。

回答

1

你不希望給你的控件一個參數化的構造函數,XAML將只使用它們的默認構造函數構造類型。

簡單方法

最簡單的辦法是的DependencyProperty添加到您的控制,你會指定地圖控件(我將在這個例子中使用的類型名稱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)); 

現在在混合中,Map屬性將出現在「屬性」選項卡的「其他」類別中。然後,您可以使用「創建數據綁定」的「元素屬性」選項卡來選擇它應該綁定的地圖控件。

硬核方法

不過我會傾向於建立以下這些準則Creating a New Control by Creating a ControlTemplate適當的定製控制。另外,我會擴展ContentControl基類,並在模板的核心包含ContentPresenter。控制將假設子控件是一個MyMap控件。

此方法允許在Blend中對MapEditor控件的整個外觀進行樣式設置,並允許將要「編輯」的Map控件作爲子控件拖放到MapEditor上。

+0

在最後一行中,函數typeof(MyControl)中的MyControl是什麼? – 2010-02-03 18:35:58

+0

@Shawn:對不起,我應該把'MapEditor'放在那裏來說清楚。在此參數中,指定與依賴項屬性關聯的控件的類型。這允許不同的控件註冊同名的屬性(沒有這個只有一個控件可以有一個「文本」屬性,這永遠不會)。我會編輯。 – AnthonyWJones 2010-02-03 19:06:54

+0

你好,另外一個問題,在將Map對象傳遞給Map屬性的新控件上,xaml看起來如何? – 2010-02-04 04:38:45