【发布时间】:2010-08-19 03:53:39
【问题描述】:
我有一个名为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 中是否可以这样做吗?
【问题讨论】:
标签: .net wpf user-controls custom-controls dependency-properties