2010-07-02 3 views
1

문제점 :실버 : Application.Current.Host.Content.FullScreenChanged 이벤트 AFTER 필요

I은 ​​사용자가 풀 스크린 사이에 앞뒤로 전환 때 검출 실버 Application.Current.Host.Content.FullScreenChanged 이벤트를 사용하고 방법. 불행하게도이 이벤트는 화면의 아무 것도 실제로 크기가 조정되기 전에 발생합니다.

전체 프레임과의 변경이 완료된 후 다양한 FrameworkElements의 ActualWidth/ActualHeight를 알아야합니다. 어떤 아이디어입니까?

답변

2

주 응용 프로그램 창의 SizeChanged 이벤트를 처리하여 올바른 크기를 얻을 수 있어야합니다. 애플리케이션이 전체 화면 모드에서 /로 변경되는지 여부를 명시 적으로 알아야하는 경우 FullScreenChanged 이벤트 핸들러에서 플래그를 설정할 수 있습니다. 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

App.Current.Host.Content.Resized 이벤트를 언급 했습니까? 그렇다면 다른 문제가 있습니다 : 전체 화면 모드를 종료 할 때만 트리거되며 앱이 전체 화면 모드로 들어갈 때 호출되지 않습니다. (이 냄새는 나에게 들리지만, 누군가가 뛰어 들어가서 "디자인 상"이유를 설명 할 것입니다.) – Scrappydog

+0

Silverlight 4에서 재미있는 재현 가능한 버그가 발견되어이 질문을 해결하려고 시도하는 중 충돌이 발생했습니다. 귀하의 브라우저! http://blog.scrappydog.com/2010/07/repo-fullscreen-bug-in-silverlight-4.html – Scrappydog

+0

예, 브라우저가 다운되었습니다. nice :) 이벤트에 관해서는 App.Current.Host.Content.Resized 이벤트가 아닌 내 Xaml.cs 파일의 SizeChanged 이벤트. SizeChanged 이벤트는 전체 화면 모드를 시작하거나 종료 할 때 안정적으로 시작되는 것으로 보입니다. 시연 할 기본 답변에 코드 추가. –

0

위 스티브의 정확한 응답에서 보여준 간단한 대답은 사용하는 것입니다

SizeChangedEventArgs.NewSize 

가 (에 대한 별도의 간결한 답변으로 추가 미래의 독자의 편리 성 ...)