2011-05-10 125 views
3

我做了一個自定義的TrackBar控制曝光的圖像性能,主要是作爲一個練習。我知道我可以/應該繼承我所需要的,而不是重新發明輪子,但在我的努力中我學到了很多東西。 現在,我有很多屬性,除了幾個圖像屬性外,它們都出現在設計器中。這就是我所模仿的其他工作特性(那些是整數和顏色,什麼不是,他們都按預期工作......),所以也許我應該用其他方式來做圖像。底線,我不知道我在做什麼:)自定義控件不會在設計

編輯:我的自定義控件是在Windows窗體的解決方案(VC#2008 Express的),並澄清,我的問題是,我的一些控件的屬性(圖像屬性)在設計期間未顯示在屬性選項卡中。

編輯2:讀完DependencyProperty後,完全無法理解這個概念(我很小心編程技巧或者你們的大師稱之爲黑色巫術魔法?)。我已經習慣於讓IDE解決所有的煩惱,我很高興地看到,IDE高興地表示我的其他屬性,如Color BarColorint Value等等,等等,爲什麼會Image LeftImage是任何不同,很多標準控件的有圖像屬性,也許我認爲IDE可以解決我所有的錯誤是微不足道的,但毫無疑問,微軟的傢伙每次必須在控件中設置圖像屬性時都不會構建新的編輯器。我敢打賭,他們重用了一些東西,我應該也能做到。

我堅持:(

這裏是我的蹩腳CoD3Z反正:

private Image _LeftImage; 

    /// <summary> 
    /// Sets the small image appearing to the left of the trackbar 
    /// </summary> 

    [Description("The small image appearing to the left of the trackbar"), 
    Category("Appearance"), 
    DefaultValue(typeof(Image),"null"), 
    Browsable(true), EditorBrowsable(EditorBrowsableState.Always)] 

    public Image LeftImage 
    { 
     private get { return _LeftImage; } 
     set 
     { 
      if (value.Height != 16 || value.Width != 16) 
      { 
       _LeftImage = new Bitmap(value,new Size(16,16)); 
      } 
      else _LeftImage = value; 
      Invalidate(); 
     } 
    } 

順便說一句,默認值和DefaultValueAttribute之間的區別是什麼

感謝您的指點和幫助? ! /的Mikael

+0

「默認值和DefaultValueAttribute之間的差異」 - 他們實際上是一回事。當你添加一個屬性的時候,你可以省略「屬性」後綴。 [DefaultValue(...)]創建一個DefaultValueAttribute類的實例。 – 2011-05-10 12:48:02

+0

那麼,我是不是要創建一個實例,或者它已經instanciated?我會嘗試另一個,看看;) – mickey 2011-05-10 13:01:23

+0

好吧,正如你可以從你的解釋得出結論,從DefaultValue'改變到DefaultValueAttribute'沒有什麼不同... – mickey 2011-05-10 13:05:50

回答

0

對於展,你需要重寫OnPaint方法繪製它設計的圖像。

默認值是相同的是DefaultValueAttribute。在.NET中所有屬性clases從System.Attribute繼承,而所有這些類中類似名稱* 屬性 *,其中屬性是固定的。然後「DefaultValue」就像一個別名。

+0

I認爲他想顯示財產,而不是圖像本身。 – Vale 2011-05-10 07:22:11

+0

這是正確的淡水河谷,我遇到財產沒有列出的問題... – mickey 2011-05-10 07:23:42

0

您的例子並不表明究竟是你的問題,但如果你創建自定義的控制,並希望從設計者訪問它的屬性,你應該使用水木清華這樣的:

 public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.Register("Value", typeof(object), typeof(CustomControl), 
     new FrameworkPropertyMetadata(null, ValueChanged)); 

希望這可以幫助你

+0

謝謝!我會研究你的建議。我不太明白什麼是DependencyProperty以及它的優點。對於我的其他屬性,它看起來很容易,它只是神奇地彈出到屬性列表中,以及它合適的顏色選擇器和文本框。我認爲圖像屬性也會自動顯示出來,我的意思是我的控制不是第一個具有圖像屬性的對象,對吧? – mickey 2011-05-10 07:44:05

+0

通過DependencyProperty在類中註冊您的屬性允許在Xaml中綁定到它 – 2011-05-10 07:58:14

+0

@mickey我相信您可以按照與其他屬性相似的方式執行此操作。我只是不知道如何...期待着另一個答案。 – Vale 2011-05-10 08:00:25

相關問題