[WPF] Прикрепляемые свойства
От: Аноним  
Дата: 12.01.11 12:02
Оценка:
Добрый день!
Разрабатывать свой контрол который инкапсулирует экземпляр класса Canvas.
Возникла необходимость позиционировать элементы на Canvas.
Реализовал прикрепляемые свойства Top и Left в своем объекта.
Не могу разобрать как связать эти свойства с соответствующими свойствами Canvas
Re: [WPF] Прикрепляемые свойства
От: DmitryMS  
Дата: 12.01.11 12:05
Оценка:
Рекомендую иметь свойство Position типа Point, так на одно прикрепямемое свойство меньше, одно без другого все равно не используется. Использовать в хендлере, обрабатывающем изменение вашего прикрепленного зависимого свойства — меняйте его Margin.
Re: [WPF] Прикрепляемые свойства
От: alek.sys Великобритания  
Дата: 12.01.11 12:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день!

А>Разрабатывать свой контрол который инкапсулирует экземпляр класса Canvas.
А>Возникла необходимость позиционировать элементы на Canvas.
А>Реализовал прикрепляемые свойства Top и Left в своем объекта.
А>Не могу разобрать как связать эти свойства с соответствующими свойствами Canvas

Если речь идет о Dependency property, то в случае с CustomControl можно связать так:
public CustomControl1()
{
  Binding myBinding = new Binding("Left");
  myBinding.Source = this;
  InnerCanvas.SetBinding(Canvas.LeftProperty, myBinding);
}


InnerCanvas — собственно, экземпляр класса Canvas.
В MSDN можно найти подробности.
Re[2]: [WPF] Прикрепляемые свойства
От: MxMsk Португалия  
Дата: 12.01.11 12:50
Оценка: +1
Здравствуйте, DmitryMS, Вы писали:

DMS>Рекомендую иметь свойство Position типа Point, так на одно прикрепямемое свойство меньше, одно без другого все равно не используется. Использовать в хендлере, обрабатывающем изменение вашего прикрепленного зависимого свойства — меняйте его Margin.

Плохая рекомендация. Такой тип данных почти не используется в свойствах стандартных элементов WPF, а потому привязка данных между контролами будет требовать использование конвертера в одну сторону и приводить к двойному боксингу в другую. На фига такое надо
Re: [WPF] Прикрепляемые свойства
От: MxMsk Португалия  
Дата: 12.01.11 12:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день!

А>Разрабатывать свой контрол который инкапсулирует экземпляр класса Canvas.
А>Возникла необходимость позиционировать элементы на Canvas.
А>Реализовал прикрепляемые свойства Top и Left в своем объекта.
А>Не могу разобрать как связать эти свойства с соответствующими свойствами Canvas
Насколько я понял, у вас есть класс, который внутри себя использует Canvas. Вы создали в этом классе прикрепляемые свойства Top и Left. С какой целью? Как планируется их использовать?
Re[3]: [WPF] Прикрепляемые свойства
От: DmitryMS  
Дата: 12.01.11 13:48
Оценка:
ты уверен, что понял о чем вопрос и что я сказал?
Re: [WPF] Прикрепляемые свойства
От: Sinix  
Дата: 12.01.11 14:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день!

А>Разрабатывать свой контрол который инкапсулирует экземпляр класса Canvas.
А>Возникла необходимость позиционировать элементы на Canvas.
А>Реализовал прикрепляемые свойства Top и Left в своем объекта.
А>Не могу разобрать как связать эти свойства с соответствующими свойствами Canvas

Зачем? просто используйте в элементах уже существующие Top/Left.
Re[4]: [WPF] Прикрепляемые свойства
От: MxMsk Португалия  
Дата: 12.01.11 14:03
Оценка:
Здравствуйте, DmitryMS, Вы писали:

DMS>ты уверен, что понял о чем вопрос и что я сказал?

О чем вопрос не очень
Автор: MxMsk
Дата: 12.01.11

Тебе ответил на это: "Рекомендую иметь свойство Position типа Point, так на одно прикрепямемое свойство меньше, одно без другого все равно не используется"... и объяснил, почему данный подход не очень то хорош. А так, меня всегда можно меня поправить
Re[5]: [WPF] Прикрепляемые свойства
От: DmitryMS  
Дата: 12.01.11 14:08
Оценка:
Я имел ввиду использовать одно свойство вместо двух, тип второстепенное. Потом, ты пробовал сделать так:

namespace:Behavior.Property="1,5" со свойством Property Point? Это работает. Для простой трансляции достаточно биндинга на (Canvas.Left) & (Canvas.Top) as per Sinix.

RE>>А так, меня всегда можно меня поправить

Без сомнения.
Re[6]: [WPF] Прикрепляемые свойства
От: MxMsk Португалия  
Дата: 12.01.11 14:33
Оценка:
Здравствуйте, DmitryMS, Вы писали:

DMS>Я имел ввиду использовать одно свойство вместо двух, тип второстепенное. Потом, ты пробовал сделать так:

DMS>namespace:Behavior.Property="1,5" со свойством Property Point? Это работает. Для простой трансляции достаточно биндинга на (Canvas.Left) & (Canvas.Top) as per Sinix.
Дык, я и не утверждал, что значение свойства с типом Point нельзя задать в XAML. Речь идет о том, что это свойство неудобно использовать в Binding-ах. Если я захочу привязать его, например, к положению двух полос прокрутки, то у них у каждой есть по свойству Value с типом double. А мне нужен Point. Приплыли — идем писать конвертер для MultiBinding... Теперь обратный вариант. Мне придется делать привязку с путем Point.X. Движок Binding-а при получении значения свойства с типом Point сделает первый боксинг, а потом, извлечет из него X, что будет вторым боксингом. Неудобно.
Re[7]: [WPF] Прикрепляемые свойства
От: MxMsk Португалия  
Дата: 22.02.11 07:10
Оценка:
Здравствуйте, MxMsk, Вы писали:

MM>Дык, я и не утверждал, что значение свойства с типом Point нельзя задать в XAML. Речь идет о том, что это свойство неудобно использовать в Binding-ах. Если я захочу привязать его, например, к положению двух полос прокрутки, то у них у каждой есть по свойству Value с типом double. А мне нужен Point. Приплыли — идем писать конвертер для MultiBinding... Теперь обратный вариант. Мне придется делать привязку с путем Point.X. Движок Binding-а при получении значения свойства с типом Point сделает первый боксинг, а потом, извлечет из него X, что будет вторым боксингом. Неудобно.

Думаю, я ошибся в выделенном. Значение самого Point-а будет взято через DependencyObject.GetValue, а там никакого unboxing-а естественно не будет. Причем тоже самое должно наблюдаться и при привязке на обычные свойства. Вся нагрузка ляжет только на получение непосредственного значения (то бишь на X) и только из-за того, что X — не box.
Re[8]: [WPF] Прикрепляемые свойства
От: Sinix  
Дата: 22.02.11 07:14
Оценка: +1
Здравствуйте, MxMsk, Вы писали:

Вся нагрузка ляжет только на получение непосредственного значения (то бишь на X) и только из-за того, что X — не box.

Вся нагрузка размажется по цепочке dependency property и PropertyDescriptr-ов (особенно если используются дефолтные, через рефлексию). Боксинг — копейки.
Re[9]: [WPF] Прикрепляемые свойства
От: MxMsk Португалия  
Дата: 22.02.11 07:51
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Вся нагрузка размажется по цепочке dependency property и PropertyDescriptr-ов (особенно если используются дефолтные, через рефлексию). Боксинг — копейки.

Безусловно. Меня здесь интересовал вопрос попутного boxing/unboxing.
Re[3]: [WPF] Прикрепляемые свойства
От: DmitryMS  
Дата: 23.02.11 16:02
Оценка:
что за чушь если вы используете свойства одного типа на обоих концах байндинга они будут совместимы по определению. Если нет — вам 100% нужен конвертер и внутри этого конвертора вам придется приводить типаы. Вообше меня всегда умиляет боксинг как главный аргумент, вы же не студент, нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.