2011-11-18 59 views
2

給定一個具有畫布的自定義用戶控件。Silverlight - 在用戶控件中暴露畫布

<Grid> 
    <Border BorderBrush="Black" BorderThickness="3"> 
     <Canvas x:Name="CanvasDropArea" Background="#FFF7BDBD"/> 
    </Border> 
</Grid> 

是否有一種方法來暴露畫布以允許其他控件被追加到上述的用戶控件中?

<CustomControlWithCanvas> 
    <Canvas> 
     <!--other user control--> 
    <Canvas> 
</CustomControlWithCanvas> 

我試圖暴露出它作爲一個屬性,但失敗了,作爲其被作爲一個正常的屬性,而不是收集在允許UI元素要追加處理。但是,我可以通過檢索畫布並手動添加控件,使用後面的代碼將控件追加到元素上。
那麼暴露畫布的正確方法是什麼?以允許在設計時改變它,並保留畫布TOP和左邊的依賴項屬性。

+0

我想知道爲什麼你不能使用正常的畫布?你需要把它放在一個用戶控件中的原因是什麼? –

+0

我試圖實現的是有一個邊框和幾個自定義行爲連接到畫布,所以而不是重複這個(總共8畫布),我只是把它作爲一個通用的用戶控件。所以在未來,如果我要追加額外的行爲,我只需要編輯我的主要用戶控件。或者有更好的方法來實現呢? –

+0

這些行爲是否附加到「Border」或「Canvas」? –

回答

0

嘗試此操作 - 將控件的類型從UserControl更改爲ContentControl,放入Canvas中,並以某種方式將ContentPresenter的Content屬性綁定到控件的Content屬性 - 可能是通過命名控件並使用它。

以更標準的方式 - 你可以實現它作爲模板/自定義控件而不是UserControl,將模板放在Themes/Generic.xaml而不是MyControl.xaml中,在構造器中定義DefaultStyleKey,定義TemplateParts等