Как открыть пользовательские свойства элемента управления внутри пользовательского элемента управления? - PullRequest
1 голос
/ 19 августа 2010

У меня есть пользовательский элемент управления 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

И XAML для чего-то, что использует элемент управления LatLong, будет выглядеть так:

<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 голосов
/ 19 августа 2010

Конечно, почему бы вам просто не передать свои LatLong эти два свойства?

public TextBoxWithLabelAndUnits LatitudeControl
{
    get { return latitude; }
}

public TextBoxWithLabelAndUnits LongitudeControl
{
    get { return longitude; }
}

Тогда они будут напрямую доступны через код.

...