Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在用户控件内公开自定义控件属性?_.net_Wpf_User Controls_Custom Controls_Dependency Properties - Fatal编程技术网

.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中设置属性的功能。你知道在那种情况下我能做什么吗?