BrightnessOverride.IsSupportedChanged 切换显示器时未触发

BrightnessOverride.IsSupportedChanged is not triggered when I switch the monitors

我对这个 UWP API: BrightnessOverride.IsSupportedChanged 的工作原理有疑问。目前这是我的设置:

  1. 我有一台 HP 笔记本电脑,我可以使用 BrightnessOverride 来改变它的亮度。如果我尝试获取 IsSupported,它是 returning true。
  2. 我还有一个用于这台笔记本电脑的扩展坞,它有两个显示器。在坞站上时,IsSupported 为假,因为 Windows 在这种情况下无法更改亮度。

我遇到的问题是,当我启动我的应用程序,然后从扩展坞中取出笔记本电脑时,BrightnessOverride.IsSupportedChanged 没有被调用。如果我尝试获取 IsSupported,它仍然是 true。我必须重新启动我的应用程序才能使其 return 再次为真。如果我从对接模式切换到笔记本电脑模式,也会发生同样的事情,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 值。

feel like when the device is changed, I probably need to call GetForCurrentView() again to get the new view to override, but how do I do that if the event is not called?

为了您的快乐,您可以使用 ProjectionDisplayAvailableChanged 事件来检测监视器是否已更改。它发生在投影仪或其他辅助显示器可用或不可用时。

ProjectionManager.ProjectionDisplayAvailableChanged += ProjectionManager_ProjectionDisplayAvailableChanged;

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