Проблема:
Я использую Приложение Silverlight. Текущий. Хост. Содержание. Событие FullScreenChanged для обнаружения, когда пользователь переключается назад и вперед между полноэкранным режимом. К сожалению, кажется, что это событие стреляет, ПРЕЖДЕ ЧЕМ что-либо на экране на самом деле изменено.
Я должен знать ActualWidth/ActualHeight различного FrameworkElements ПОСЛЕ ТОГО, КАК изменение в и с полного экрана будет завершено... Какие-либо идеи?
Вы сможете получить правильный размер, обработав событие SizeChanged в главном окне приложения. Если вам явно нужно знать, переходит ли приложение из / в полноэкранный режим, возможно, вы могли бы установить флаг в обработчике событий FullScreenChanged - например, свойство типа bool под названием IsFullScreenChanging - затем вы можете проверить это свойство в обработчике событий SizeChanged в главном окне, сделать все, что вам нужно, и сбросить флаг в ожидании следующего события FullScreenChanged.
cs:
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
SizeChanged += MainPageSizeChanged;
}
private static void MainPageSizeChanged(object sender, SizeChangedEventArgs e)
{
Debug.WriteLine("Size is now " + e.NewSize);
}
private void ToggleFullScreenButtonClick(object sender, RoutedEventArgs e)
{
Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;
}
}
}
xaml:
<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="79,110,0,0" Name="FullScreenButton" VerticalAlignment="Top" Width="75" Click="ToggleFullScreenButtonClick" />
</Grid>
</UserControl>
Простой ответ, продемонстрированный в правильном ответе Стива выше, заключается в использовании:
SizeChangedEventArgs.NewSize
(Добавляю как отдельный краткий ответ для удобства будущих читателей...)