Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

Sergiy Baydachnyy

SilverLight 3: Улучшения при связывании элементов с данными

SilverLight 3 позволяет с легкостью связывать свойства различных элементов управления, используя только XAML код.

Фактически мы использовали эту возможность в разделе, посвященном 3D проекциям. Вот как выглядил наш код:       

<MediaElement Source="4.wmv" > 
   <MediaElement.Projection> 
     <PlaneProjection x:Name="projection" ></PlaneProjection> 
   </MediaElement.Projection> 
</MediaElement> 
<Slider Width="588" Minimum="0" Maximum="360" Value="{Binding RotationX, Mode=TwoWay, ElementName=projection}"></Slider>

Тут мы связали свойство RotationX элемента projection с текущим значением Slider. Как видите, тут используется довольно простая конструкция.

Опубліковані Monday, April 13, 2009 2:36 PM від Sergiy Baydachnyy

Коментарі

 

anvaka сказав:

Хотел задать этот вопрос еще на унете: значит ли добавление ElementName-байндинга введение логического дерева в Silverlight'e? Если нет, то какой скоуп поиска элемента, имя которого указано в байндинге?

April 13, 2009 4:45 AM
 

Helen сказав:

Нет, не значит. В Silverlight 3 нет LogicalTreeHelper. Рассматривается только концепция визуального дерева. Думаю, что в случае с ElementName-байндингом для поиска имени используется FrameworkElement.FindName. Ну а область видимости определяется XAML namescopes.

April 13, 2009 11:52 AM
 

Sergey Lutay сказав:

Так оно и есть. Метод  GetSourceElement(), класса BindingExpression, вызывает  FindNameInPage() у объекта класса FrameworkElement, а тот в свою очередь ищет вверх по парентам:

FrameworkElement templatedParent = this;

obj2 = templatedParent.FindName(name);

while ((obj2 == null) && (templatedParent != null))

   {

       templatedParent = templatedParent.TemplatedParent as FrameworkElement;

       if (templatedParent != null)

       {

           obj2 = templatedParent.FindName(name);

       }

   }

April 13, 2009 12:26 PM
 

anvaka сказав:

Helen, Сергей, спасибо за ответы :)!

April 13, 2009 1:21 PM
 

Sergiy Baydachnyy сказав:

Смотрю народу по ночам спать совсем не хочется:) Как бы и добавить нечего.

April 13, 2009 10:03 PM
 

Eugene Khvedchenya сказав:

Не хватает поддержки <RelativeSource Mode="FindAncestor">. Для пользовательских элементов управления приходится давать имя коневому элементу (UserControl) и байндиться по ElementName.

April 14, 2009 12:29 AM
 

Helen сказав:

Ну как мы видим, постепенно набор возможностей расширяется. В RelativeSource уже есть поддержка режимов TemplatedParent и Self.

Может и FindAncestor в какой-то версии перекочует сюда.

P.S. Кстати, недавно наткнулась на интересную статью - на счет расширения вообще возможностей байндинга  в SL ( даже  RelativeSource с режимом FindAncestor). Писалась она правда еще до выхода SL3, но часть функциональности все равно актуальна:

http://www.scottlogic.co.uk/blog/wpf/2009/02/relativesource-binding-in-silverlight/

April 14, 2009 3:01 AM
 

Eugene Khvedchenya сказав:

В свете SL3, явно видна тенденция к сведению функционала WPF и Silverlight к общему знаменателю. Не даром на MIX'09 показывали, как один и тот-же код XAML "кочует" из WPF в Silverlight и обратно без проблем. Видимо, в финале отличия вообще сведутся к минимуму.

April 14, 2009 3:36 AM
 

?????????? Silverlight 5 « ???????? ???????????? ???????????????????? сказав:

February 16, 2011 10:26 AM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.