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

 之前看到以及其它应用都有调节屏幕亮度的功能,还以为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

你可能感兴趣的:(windows phone)