2011-09-14 56 views
0

我遇到了麻煩,我需要您的幫助。這裏是我的代碼:將ContentControl資源分配給繼承的ContentControl元素

public class CircleElement : ContentControl 
{ 

public ContentControl me; 
private FrameworkElement _parent; 

public CircleElement() 
{ 
    if (_parent != null) 
    { 
    me = (ContentControl)_parent.FindResource("CircleRes"); 
    me.Style = (Style)_parent.FindResource("CircleStyle"); 
    } 

} 

的CircleElement繼承ContentControl中,我想將資源分配「CircleRes」和式「CircleStyle」給它。喜歡的東西:

this = (ContentControl)_parent.FindResource("CircleRes"); 
this.Style = (Style)_parent.FindResource("CircleStyle"); 

這件事是不是allowable.So來解決這個問題,我實例化的ContentControl中我的元素;但代碼有點凌亂!如何讓它更「優雅」?

在此先感謝

保羅

+0

爲什麼你這樣做?你可以解釋嗎? 「例如,我有兩種觀點(比如渲染某種類型的邊界),一種是白色的,另一種是在兩個視圖中呈現的視圖......」。我只是不明白你爲什麼試圖以編程方式而不是聲明方式來做這樣的事情? –

+0

,因爲我需要在用戶點擊按鈕「創建圓圈」時創建儘可能多的圓圈。我解決了將資源標籤從更改爲的問題,然後調用構造函數:this.Content = _parent.FindResource(「CircleRes」); this.Style =(Style)_parent.FindResource(「CircleStyle」); – rebe21

回答

0

你的要求是有點怪怪的,但它是通過多種方式實現......

而是具有其他內容控制(即me)爲什麼不能設置this控件的內容本身?

this.Content 
      = (ContentControl)_parent.FindResource("CircleRes"); 
    ((ContentControl)(this.Content)).Style 
      = (Style)_parent.FindResource("CircleStyle"); //*** Potential problem 

問題:因爲你的代碼(和我太)由基準設置風格"CircleStyle""CircleRes"資源的潛在問題聲明表明這種方式。

怎麼樣? me((ContentControl)(this.Content))無非是"CircleRes"資源!

這意味着如果"CircleRes"在其他地方被引用,它將攜帶"CircleStyle"作爲它自己的風格。如果你設置了一些新的Style"CircleRes"其他地方,那麼它會覆蓋Style"CircleRes"用於任何地方,包括上面的代碼(其中意的風格是"CircleStyle"

解決方案:使用ContentTemplate代替。模板不會通過實例參考引起視覺效果。

所以實際上你應該有一個DataTemplate(稱爲「CircleResTemplate」)並將其設置爲ContentTemplate類爲CircleElement類。

this.ContentTemplate 
     = (DataTemplate)_parent.FindResource("CircleResTemplate"); 
    this.Style 
     = (Style)_parent.FindResource("CircleStyle"); 

讓我知道這是否回答你的問題。

相關問題