1

我有一個名爲TextBoxWithLabelAndUnits的自定義控件。從名字,你可以說這是一個TextBox是收到了Label和之後一個Label,以便自定義控制是這樣的:如何在用戶控件中公開自定義控件屬性?

 ----------------- 
Label: |    | units 
     ----------------- 

我揭露幾個依賴屬性來配置控制,例如如:

LabelWidth 
LabelText 
UnitText 
TextBoxWidth 

現在我有一個用戶控件調用LatLong,我使用的緯度/經度輸入。在XAML看起來是這樣的:

<UserControl ...> 
    <StackPanel> 
     <TextBoxWithLabelAndUnits LabelText="Latitude:" 
            UnitText="degrees" 
     /> 
     <TextBoxWithLabelAndUnits LabelText="Longitude:" 
            UnitText="degrees" 
     /> 
    </StackPanel> 
</UserControl> 

這將創建一個看起來像這樣的用戶控件:

  ----------------- 
Latitude: |    | degrees 
      ----------------- 
      ----------------- 
Longitude: |    | degrees 
      ----------------- 

現在我想用我的用戶控件中的一個項目。但是,我希望用戶控件公開屬性,以便我可以更改標籤,如果我不喜歡默認設置。我可以公開每一個作爲一個新的依賴屬性看起來像這樣:

LatitudeLabelWidth 
LatitudeLabelText 
LatitudeUnitText 
LatitudeTextBoxWidth 

LongitudeLabelWidth 
LongitudeLabelText 
LongitudeUnitText 
LongitudeTextBoxWidth 

和使用一個LatLong控制XAML的東西看起來就像這樣:

<Window ...> 
    <LatLong LatitudeLabelText="Latitude (in degrees)" 
      LatitudeUnitText="" 
      LongitudeLabelText="Longitude (in degrees)" 
      LongitudeUnitText="" 
    /> 
</Window> 

,但似乎像很多因爲我必須重新公開每個實例的每個依賴項屬性。我在想,如果有一個公開TextBoxWithLabelAndUnits實例本身更簡單的方法,這樣我就可以直接編輯它的屬性和使用XAML看起來像這樣:

<Window ...> 
    <LatLong Latitude.LabelText="Latitude (in degrees)" 
      Latitude.UnitText="" 
      Longitude.LabelText="Longitude (in degrees)" 
      Longitude.UnitText="" 
    /> 
</Window> 

所以,換句話說,而不是暴露的屬性在用戶控件內部的每個自定義控件上,我公開了自定義控件,並使用點符號訪問所有屬性。

有誰知道這是可能做WPF?

回答

3

好的 - 你爲什麼不給你的LatLong這兩個屬性?

public TextBoxWithLabelAndUnits LatitudeControl 
{ 
    get { return latitude; } 
} 

public TextBoxWithLabelAndUnits LongitudeControl 
{ 
    get { return longitude; } 
} 

然後,他們將通過代碼直接訪問。

+2

嗨丹,我試過了,雖然它允許您訪問代碼中的控件,但我還需要能夠在XAML中設置屬性。任何想法在這種情況下我能做些什麼? – 2010-08-19 19:36:55

相關問題