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

相关问题