在 WPF 中,我們可以直接做兩個控制項之間的屬性資料繫結,例如:
<Slider x:Name="slider1"
Minimum="0" Maximum="100" SmallChange="1" LargeChange="10"
/>
<TextBox VerticalAlignment="Top" Canvas.Top="50"
Width="{Binding Path=Value, ElementName=slider1}"
Height="40"
/>
這樣就可以讓 TextBox 的寬度隨著 slider 而改變。##ReadMore##
但是在 Silverlight 中不支援 ElementName 的設定,所以就沒辦法直接這樣做資料繫結,不過我們可以做一個靜態資源,然後將 slider 和 textbox 都繫結到該靜態資源中,來達到一樣的效果。
首先要先建立一個類別並實作 INotifyPropertyChanged 介面:
public class ElementBinding : INotifyPropertyChanged
{
double val;public double Value
{
get { return val; }
set { val = value; OnPropertyChanged("Value"); }
}public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
然後在 XAML 檔的 UserControl 元素中加入屬性:
xmlns:u="clr-namespace:PropertyBinding;assembly=PropertyBinding"
再加上 Resource 定義:
<UserControl.Resources>
<u:ElementBinding x:Key="abc" Value="100" />
</UserControl.Resources>
Binding 設定:
<Slider x:Name="theSlider"
Minimum="0" Maximum="100" SmallChange="1" LargeChange="10"
Value="{Binding Value, Mode=TwoWay, Source={StaticResource abc}}"
/>
<TextBox VerticalAlignment="Top" Canvas.Top="50"
Width="{Binding Value, Mode=TwoWay, Source={StaticResource abc}}"
Height="40"
/>
這樣就可以了。
0 意見:
張貼留言