.net 如何在用户控件内公开自定义控件属性?
我有一个名为.net 如何在用户控件内公开自定义控件属性?,.net,wpf,user-controls,custom-controls,dependency-properties,.net,Wpf,User Controls,Custom Controls,Dependency Properties,我有一个名为textbox的自定义控件,带有LabelAndUnits。从名称可以看出它是一个文本框,前面有一个标签,后面有一个标签,因此自定义控件如下所示: ----------------- Label: | | units ----------------- <UserControl ...> <StackPanel> <TextBoxWithLabelAndUnits Labe
textbox的自定义控件,带有LabelAndUnits
。从名称可以看出它是一个文本框
,前面有一个标签
,后面有一个标签
,因此自定义控件如下所示:
-----------------
Label: | | units
-----------------
<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
<Window ...>
<LatLong LatitudeLabelText="Latitude (in degrees)"
LatitudeUnitText=""
LongitudeLabelText="Longitude (in degrees)"
LongitudeUnitText=""
/>
</Window>
<Window ...>
<LatLong Latitude.LabelText="Latitude (in degrees)"
Latitude.UnitText=""
Longitude.LabelText="Longitude (in degrees)"
Longitude.UnitText=""
/>
</Window>
我公开了几个依赖属性来配置控件,例如:
LabelWidth
LabelText
UnitText
TextBoxWidth
现在我有一个名为LatLong
的用户控件,用于纬度/经度输入。XAML如下所示:
-----------------
Label: | | units
-----------------
<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
<Window ...>
<LatLong LatitudeLabelText="Latitude (in degrees)"
LatitudeUnitText=""
LongitudeLabelText="Longitude (in degrees)"
LongitudeUnitText=""
/>
</Window>
<Window ...>
<LatLong Latitude.LabelText="Latitude (in degrees)"
Latitude.UnitText=""
Longitude.LabelText="Longitude (in degrees)"
Longitude.UnitText=""
/>
</Window>
现在我想在项目中使用我的用户控件。但是,我希望用户控件公开属性,以便在不喜欢默认设置时可以更改标签。我可以将每个属性公开为一个新的依赖项属性,如下所示:
-----------------
Label: | | units
-----------------
<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
<Window ...>
<LatLong LatitudeLabelText="Latitude (in degrees)"
LatitudeUnitText=""
LongitudeLabelText="Longitude (in degrees)"
LongitudeUnitText=""
/>
</Window>
<Window ...>
<LatLong Latitude.LabelText="Latitude (in degrees)"
Latitude.UnitText=""
Longitude.LabelText="Longitude (in degrees)"
Longitude.UnitText=""
/>
</Window>
使用LatLong
控件的东西的XAML如下所示:
-----------------
Label: | | units
-----------------
<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
<Window ...>
<LatLong LatitudeLabelText="Latitude (in degrees)"
LatitudeUnitText=""
LongitudeLabelText="Longitude (in degrees)"
LongitudeUnitText=""
/>
</Window>
<Window ...>
<LatLong Latitude.LabelText="Latitude (in degrees)"
Latitude.UnitText=""
Longitude.LabelText="Longitude (in degrees)"
Longitude.UnitText=""
/>
</Window>
换句话说,我没有公开用户控件中每个自定义控件的属性,而是公开自定义控件本身,并使用点表示法访问所有属性
有人知道在WPF中是否可以这样做吗?当然可以——为什么不把这两个属性赋予LatLong
public TextBoxWithLabelAndUnits LatitudeControl
{
get { return latitude; }
}
public TextBoxWithLabelAndUnits LongitudeControl
{
get { return longitude; }
}
然后可以通过代码直接访问它们。Hi Dan,我试过了,虽然它允许您在代码中访问控件,但我还需要在XAML中设置属性的功能。你知道在那种情况下我能做什么吗?