Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Проблема с биндингом


Автор: dazy 22.12.2009, 11:47
Сделал cuctom control,  в шаблоне определяю связь разных свойств контрола с его внутренностями:

Код

 <Path x:Name="CorePart"
    Fill="{TemplateBinding Background}"
    StrokeThickness="{TemplateBinding BorderThickness.Left}"/>


Fill="{TemplateBinding Background}" - срабатывает хорошо и ни каких нареканий нет. А вот StrokeThickness="{TemplateBinding BorderThickness.Left}" не хочет связываться. VS выдает "Type BorderThickness was not fownd"

Если биндить так StrokeThickness="{TemplateBinding BorderThickness}" (без .Left), то все компилируется, но естественно не работает должным образом, потому как BorderThickness это структура, а StrokeThickness это double.
Если делаю свое DP типа double, то вообще вываливается какая-то страшная ошибка, причем, только в Expression Blend, в VS все компилится, приложение не запускается. Делаю, DP типа Color, ну так, ради проверки, может я не правильно делаю DP, все в порядке. Но DP c double, float запускаться не хочет, хотя в VS ошибок компиляции нет. 

В чем может быть проблема?

Автор: dazy 22.12.2009, 16:32
Проблему DP победили:

Код

        public static readonly DependencyProperty StrokeThicknessProperty =
            DependencyProperty.Register("StrokeThickness", typeof(Double), typeof(HandPart),
              new PropertyMetadata((Double)0));


Оказывается, у меня PropertyMetadata была такого вида PropertyMetadata(0)); этот 0 воспринимается компилятором как int, чтобы число имело тип float, нужно явно указать тип (Double)0, или писать его в формате 0.0


На BorderThickness.Left плюнул, забиндил Path. StrokeThickness на успешно созданное StrokeThickness.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)