切换显示器时不会触发BrightnessOverride.IsSupportedChanged

时间:2019-09-26 20:40:58

标签: c# uwp screen-brightness

我对以下UWP API的工作方式有疑问:BrightnessOverride.IsSupportedChanged。当前这是我的设置:

  1. 我有一台HP笔记本电脑,可以使用BrightnessOverride更改其亮度。如果我尝试获取IsSupported,它将返回true。
  2. 我还为此笔记本电脑提供了一个扩展坞,它有两个显示器。在扩展坞上时,IsSupported为false,因为Windows在这种情况下无法更改亮度。

我遇到的问题是,当我启动我的应用程序,然后从扩展坞中删除笔记本电脑时,未调用BrightnessOverride.IsSupportedChanged。如果我尝试获得IsSupported,那仍然是事实。我必须重新启动我的应用程序才能使其再次返回true。如果我从对接模式切换到笔记本电脑模式,也会发生同样的事情,IsSupported将保持为false,并且永远不会调用该事件。

我感觉在更换设备时,我可能需要再次调用GetForCurrentView()才能覆盖新视图,但是如果不调用事件该怎么办?

此处的文档未提供任何示例: https://docs.microsoft.com/en-us/uwp/api/windows.graphics.display.brightnessoverride.issupportedchanged

为重现此问题,我设置了一个简单的UWP测试应用程序,并将其添加到MainPage构造函数中:

b = BrightnessOverride.GetForCurrentView();
b.IsSupportedChanged += B_IsSupportedChanged;

回调:

private void B_IsSupportedChanged(BrightnessOverride sender, object args)
{
    TextBlock1.Text = "Is changed";
}

然后在按钮单击功能中,打印出IsSupported值。

1 个答案:

答案 0 :(得分:1)

  

感觉就像在更换设备时一样,我可能需要再次调用GetForCurrentView()才能覆盖新视图,但是如果未调用事件该怎么办?

为获得乐趣,您可以使用ProjectionDisplayAvailableChanged事件来检测监视器已更改。当投影仪或其他辅助显示器变为可用或不可用时,就会发生这种情况。

ProjectionManager.ProjectionDisplayAvailableChanged += ProjectionManager_ProjectionDisplayAvailableChanged;

private void ProjectionManager_ProjectionDisplayAvailableChanged(object sender, object e)
{
   //call GetForCurrentView method again
}