Silverlight: необходимо ПОСЛЕ применения. Текущее.Хост.Материал - PullRequest
1 голос
/ 03 июля 2010

Проблема:

Я использую событие Silverlight Application.Current.Host.Content.FullScreenChanged, чтобы определить, когда пользователь переключается между полноэкранным режимом и обратно. К сожалению, похоже, что это событие запускается ДО того, как что-нибудь на экране действительно изменится.

Мне нужно знать ActualWidth / ActualHeight различных FrameworkElements ПОСЛЕ того, как изменение в полноэкранном режиме и из него завершено ... Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 июля 2010

Вы должны быть в состоянии получить правильный размер, обрабатывая событие 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>
0 голосов
/ 06 июля 2010

Простой ответ, показанный в правильном ответе Стива выше, заключается в использовании:

SizeChangedEventArgs.NewSize

(Добавление в качестве отдельного краткого ответа для удобства будущих читателей ...)

...