Windows Phone 调整屏幕亮度的简单实现

来源:互联网 发布:ext json 编辑:程序博客网 时间:2024/06/05 05:05

之前看到以及其它应用都有调节屏幕亮度的功能,还以为MS有相关的API,就去MSDN找了下,但是怎么都找不到。今天突然想到做自定义MessageBox时,由于要突出弹出框部分,所以会改变LayoutRoot的opacity属性,以达到屏幕暗下来的效果,于是马上试了下,结果是可行的。添加一个Slider,并将其Value熟性绑定到LayoutRoot的Opcity属性上,这样一来,在滑动Slider时,LayoutRoot的Opcaity就会改变,也就达到了我们想要的效果。代码很也简单:

<Grid x:Name="LayoutRoot" Background="Transparent" Opacity="{Binding ElementName=slider, Path=Value}" >
<Slider x:Name="slider" Height="100" Minimum="0.1"  Maximum="1" Value="1"/>

  由于之前认为这个只能改变当前的Opacity,所以又想了一个方法,利用Behavior,这个东东真是让我爱不释手啊。具体思路就是去的当前app的PhoneApplicationFrame,它也包含一个Opcity的依赖属性,所以我们可以从这一点入手。代码也很简单:

public class ChangeBrightnessBehavior : Behavior<Slider>{    PhoneApplicationFrame frame;     protected override void OnAttached()    {        base.OnAttached();        this.AssociatedObject.ValueChanged += AssociatedObject_ValueChanged;    }     void AssociatedObject_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)    {        if (frame == null)            frame = App.Current.RootVisual as PhoneApplicationFrame;        frame.Opacity = e.NewValue;    }     protected override void OnDetaching()    {        this.AssociatedObject.ValueChanged -= AssociatedObject_ValueChanged;        frame = null;        base.OnDetaching();    }}


  使用的时候如果闲前台添加行为太麻烦,还可以使用后置代码进行添加:

  1System.Windows.Interactivity.Interaction.GetBehaviors(slider).Add(new ChangeBrightnessBehavior());

  Ps:注意引入相应的命名空间,slider的最小值设为0.1是因为当Opacity值为0时,元素是不可见的,屏幕全黑了,连slider都看不见了,UE就不好了,建议稍微设高一点。

  本文来自hamguy博客,原文地址:http://www.hamguy.info/?p=533

原创粉丝点击