Silverlight 4 беззащитный контроль. Привязать к другому элементу в том же элементе управления - PullRequest
1 голос
/ 03 января 2012

Я создал элемент управления без внешнего вида, используя silverlight 4. Этот элемент управления содержит текстовое поле, в которое пользователь будет вводить данные, и кнопку, которая увеличивает размер текстового поля путем увеличения значения MinHeight элемента управления на 10 при каждом его нажатии (Я установил растяжение текстового поля, чтобы оно росло вместе с элементом управления).

Этот бит работает нормально, но теперь я хочу расширить функциональность элементов управления, добавив еще одно текстовое поле, в котором будет отображаться текущий MinHeight элемента управления, который, по-видимому, я не могу сделать.Я пытался

Text="{Binding RelativeSource={RelativeSource Self}, Path=MinHeight, Mode=TwoWay}">

Я не уверен, почему, но это всегда показывает как 0

Обновление

В моих попытках решить, я попытался чейджингимя исходного текстового поля PART_sourceData и просто чтобы проверить правильность привязки, я установил путь к свойству text.Похоже, что это приводит к тексту источника, как я и ожидал

Text="{Binding Mode=TwoWay, ElementName=PART_sourceData, Path=Text}"

Мой следующий шаг должен был изменить путь на Высоту

Text="{Binding Mode=TwoWay, ElementName=PART_sourceData, Path=Height}"

Но это возвращает NaN.Поэтому я попытался MinHeight

Text="{Binding Mode=TwoWay, ElementName=PART_sourceData, Path=MinHeight}"

Это всегда возвращает 0, даже если код позади имеет действительное число.Что происходит не так?Поскольку текст проходит правильно, я считаю, что привязка верна, но что плохого в получении высоты?

Ответы [ 2 ]

0 голосов
/ 06 января 2012

Хорошо, у меня есть решение. Не самый лучший, но он работает!

Мне пришлось создать новое свойство зависимости

public static readonly DependencyProperty EditorHeightProperty =
        DependencyProperty.Register("EditorHeight", typeof(string), typeof(EditorControl), new PropertyMetadata(default(string)));

    public string EditorHeight
    {
        get { return (string)GetValue(EditorHeightProperty); }
        set { SetValue(EditorHeightProperty, value); }
    }

Затем я привязываю текст к этому свойству, используя

Text="{TemplateBinding EditorHeight}"
0 голосов
/ 03 января 2012

При связывании с RelativeSource Self вы смотрите, что контролирует MinHeight.Вам нужно будет присвоить оригинальному TextBox имя с атрибутом x:Name, а затем использовать ElementName привязку.

...