Привязка ElementName не в настоящее время поддерживается в Silverlight 2. В этой статье документации MSDN довольно кратко описаны особенности функциональности WPF, которые Silverlight делает и не предоставляет в настоящее время.
А пока вы должны использовать какое-то посредническое свойство, вот полный пример:
Page.xaml:
<UserControl x:Class="SilverlightApplication1.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<StackPanel x:Name="LayoutRoot" Background="AliceBlue">
<Slider x:Name="Slider1" Minimum="10" SmallChange="10"
LargeChange="20" Maximum="100"
Value="{Binding HelperValue, Mode=TwoWay}" Cursor="Hand"/>
<Rectangle x:Name="Rectangle1" Fill="Red"
Height="{Binding HelperValue, Mode=OneWay}" Width="100" />
</StackPanel>
</UserControl>
Page.xaml.cs:
using System;
using System.ComponentModel;
using System.Windows.Controls;
namespace SilverlightApplication1
{
public partial class Page : UserControl
{
BindingConduit<double> sliderToRect = new BindingConduit<double>(50.0);
public Page()
{
InitializeComponent();
LayoutRoot.DataContext = sliderToRect;
}
}
public class BindingConduit<T> : INotifyPropertyChanged where T : struct
{
private T helperValue;
public T HelperValue
{
get { return this.helperValue; }
set
{
if ((this.helperValue.Equals(value) != true))
{
this.helperValue = value;
this.RaisePropertyChanged("HelperValue");
}
}
}
public BindingConduit(T defaultValue)
{
HelperValue = defaultValue;
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
Свойство Value ползунка привязано к HelperValue и имеет значение TwoWay, высота прямоугольника привязана к тому же свойству, но требует только OneWay.
Свойство HelperValue читается из экземпляра класса BindingConduit , созданного на странице с именем sliderToRect. Этот экземпляр устанавливается как DataContext родительского элемента управления StackPanel. Любое изменение в свойстве Value в Slider1 отражается в Height of Rectangle1, поскольку свойство HelperValue вызывает событие PropertyChanged.
BindingConduit - это созданный мной пользовательский класс, который реализует INotifyPropertyChanged, а также позволяет указать значение по умолчанию для HelperValue (т. Е. Начальное значение Slider1 и высота Rectangle1 (50,0) в данном случае).