首页 文章

如何在用户控件中公开自定义控件属性?

提问于
浏览
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中是否可以做到这一点?

1 回答

  • 3

    当然 - 你为什么不给你这两个属性? LatLong

    public TextBoxWithLabelAndUnits LatitudeControl
    {
        get { return latitude; }
    }
    
    public TextBoxWithLabelAndUnits LongitudeControl
    {
        get { return longitude; }
    }
    

    然后可以通过代码直接访问它们 .

相关问题