你不希望給你的控件一個參數化的構造函數,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
上。
在最後一行中,函數typeof(MyControl)中的MyControl是什麼? – 2010-02-03 18:35:58
@Shawn:對不起,我應該把'MapEditor'放在那裏來說清楚。在此參數中,指定與依賴項屬性關聯的控件的類型。這允許不同的控件註冊同名的屬性(沒有這個只有一個控件可以有一個「文本」屬性,這永遠不會)。我會編輯。 – AnthonyWJones 2010-02-03 19:06:54
你好,另外一個問題,在將Map對象傳遞給Map屬性的新控件上,xaml看起來如何? – 2010-02-04 04:38:45