BrightnessOverride.IsSupportedChanged не срабатывает при переключении мониторов - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть вопрос о том, как работает этот UWP API: BrightnessOverride.IsSupportedChanged.В настоящее время вот мои настройки:

  1. У меня есть ноутбук HP, и я могу использовать BrightnessOverride, чтобы изменить яркость на нем.Если я пытаюсь получить IsSupported, он возвращает true.
  2. У меня также есть док-станция для этого ноутбука, и у него есть два монитора.На док-станции IsSupported имеет значение false, поскольку Windows не может изменить яркость в этом случае.

Проблема, с которой я столкнулся, заключается в том, что когда я запускаю свое приложение и затем снимаю ноутбук с док-станции, BrightnessOverride.IsSupportedChanged не вызывается.Если я попытаюсь получить IsSupported, это все равно правда.Я должен перезапустить свое приложение, чтобы оно снова вернулось.То же самое происходит, если я переключаюсь из режима стыковки в режим ноутбука, IsSupported останется ложным, и событие никогда не будет вызвано.

Мне кажется, что когда устройство меняется, мне, вероятно, нужно снова вызвать 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 Ответ

1 голос
/ 27 сентября 2019

Похоже, что при смене устройства мне, вероятно, нужно снова вызвать GetForCurrentView (), чтобы переопределить новое представление, но как мне это сделать, если событие не вызывается?

Для вашего удовольствия вы можете использовать событие ProjectionDisplayAvailableChanged, чтобы обнаружить изменение монитора.Это происходит, когда проектор или другой дополнительный дисплей становится доступным или недоступным.

ProjectionManager.ProjectionDisplayAvailableChanged += ProjectionManager_ProjectionDisplayAvailableChanged;

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