1、布局
<Grid Background="DarkGreen">
<StackPanel>
<!-- XAML不使用Value="{Binding StatusbarOpacity, Mode=TwoWay}",而是通过C#后台绑定-->
<Slider x:Name="slider_opacity" Value="0" Maximum="100" Background="DarkOrange" BorderBrush="Red" CharacterSpacing="5" Foreground="Blue"
Header="Opacity" IntermediateValue="10" Orientation="Horizontal"/>
<!-- XAML进行绑定-->
<ProgressBar x:Name="progressbar_01" Value="{Binding StatusbarOpacity}" Minimum="0" Maximum="100" Height="20" ValueChanged="progressbar_01_ValueChanged"/>
</StackPanel>
</Grid>
2、C#
public sealed partial class MainPage : Page, INotifyPropertyChanged
{
private double mOpacity=50;
public event PropertyChangedEventHandler PropertyChanged;
public double StatusbarOpacity
{
get
{
return mOpacity;
}
set
{
if (mOpacity != value)
{
mOpacity = value;
if (null != PropertyChanged)
{
PropertyChanged(this, new PropertyChangedEventArgs("StatusbarOpacity"));
}
}
}
}
public MainPage()
{
this.InitializeComponent();
//指定ProgressBar的数据源方法
//progressbar_01.DataContext = this;//方法一,直接指定控件的DataContext
this.DataContext = this;//方法二、指定MainPage为本身(推荐方法),如果ProgressBar本身的DataContext未找到StatusbarOpacity,则从父元素查找
//Slider C#后台绑定
Binding binding = new Binding();
binding.Path = new PropertyPath("StatusbarOpacity");
binding.Source = this;
binding.Mode = BindingMode.TwoWay;
slider_opacity.SetBinding(Slider.ValueProperty, binding);
}
private void progressbar_01_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
ProgressBar pb = sender as ProgressBar;
if (null == mStatusBar)
{
mStatusBar = StatusBar.GetForCurrentView();
}
mStatusBar.BackgroundOpacity = pb.Value / 100;
}
}
3、效果