2016-08-27 11 views
0

В следующем коде я не могу переодеваться с параметрами ViewSizePreference и получить, чтобы ребенок был меньше родительского. Я делаю всплывающее окно со страницы. Эта часть отлично работает. Однако оба окна имеют одинаковый размер.Как получить различные окна размера в UWP Несколько просмотров?

private async void Test_Click(object sender,RoutedEventArgs e){ 
var currentAV = ApplicationView.GetForCurrentView(); 
var newAV = CoreApplication.CreateNewView(); 
await newAV.Dispatcher.RunAsync(
       CoreDispatcherPriority.Normal, 
       async() => 
       { 
        var newWindow = Window.Current; 
        var newAppView = ApplicationView.GetForCurrentView(); 
        newAppView.Title = "New window"; 

        var frame = new Frame(); 
        frame.Navigate(typeof(MainPage), null); 
        newWindow.Content = frame; 
        newWindow.Activate(); 

        await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
         newAppView.Id, 
         ViewSizePreference.UseMinimum, 
         currentAV.Id, 
         ViewSizePreference.UseMinimum); 
       }); 
} 
+0

Почему вы не используете '' control? [Класс Pupup] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.primitives.popup.aspx) –

+0

Хассаан: Я сейчас пытаюсь всплывать, но у меня нет но он мог скользить по экрану. Это одно из моих требований. – Rick

ответ

0

Однако оба окна точно такой же размер.

Да, я только что нашел ту же проблему, и я сообщил об этой проблеме. Как только я получу ответ на этот вопрос, я отправлю его здесь.

К настоящему моменту мы можем использовать обходной путь для решения этой проблемы, так как вы хотите развернуть новое окно с меньшим размером, чем главное окно, вы можете использовать ApplicationView.TryResizeView | tryResizeView method, чтобы программно установить размер нового окна.

Например:

private async void Test_Click(object sender, RoutedEventArgs e) 
{ 
    var currentAV = ApplicationView.GetForCurrentView(); 
    //get the bounds of current window. 
    var rect = Window.Current.Bounds; 
    var newAV = CoreApplication.CreateNewView(); 
    await newAV.Dispatcher.RunAsync(
        CoreDispatcherPriority.Normal, 
        async() => 
        { 
         var newWindow = Window.Current; 
         var newAppView = ApplicationView.GetForCurrentView(); 
         newAppView.Title = "New window"; 

         var frame = new Frame(); 
         //send current window's size as parameter. 
         frame.Navigate(typeof(MainPage), rect.Width.ToString() + ":" + rect.Height.ToString()); 
         newWindow.Content = frame; 
         newWindow.Activate(); 

         await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
          newAppView.Id, 
          ViewSizePreference.UseHalf, 
          currentAV.Id, 
          ViewSizePreference.UseHalf); 
        }); 
} 

Тогда в OnNavigatedTo метод и Loaded event:

private void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    if (size != null) 
    { 
     var newwidth = Convert.ToInt32(size[0]) - 300; 
     var newheight = Convert.ToInt32(size[1]) - 200; 
     ApplicationView.GetForCurrentView().TryResizeView(new Size { Width = newwidth, Height = newwidth }); 
    } 
} 

private string[] size; 

protected override void OnNavigatedTo(NavigationEventArgs e) 

{ 
    if (e.Parameter.ToString() != "") 
    { 
     size = e.Parameter.ToString().Split(':'); 
    } 
} 

Или, если вы не возражаете, чтобы увидеть процесс изменения размеров нового окна, вы можете также попробовать этот код, и нет необходимости отправлять размер в качестве параметра в новое окно в этом методе:

var frame = new Frame(); 
frame.Navigate(typeof(MainPage), null); 
newWindow.Content = frame; 
newWindow.Activate(); 

await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
    newAppView.Id, 
    ViewSizePreference.UseHalf, 
    currentAV.Id, 
    ViewSizePreference.UseHalf); 
newAppView.TryResizeView(new Size { Width = rect.Width - 300, Height = rect.Height - 200 }); 
+0

Хорошо. Это работает. Благодарю. – Rick

+0

@Rich, так это приемлемый ответ? –

+0

Оказалось, что метод более длинного параметра не работает, но более короткий второй вариант работы. Мне нужно будет изучить это дальше, я думаю. Я получаю некоторые нежелательные побочные эффекты, такие как несколько кадров, которые не уходят и не падают за других и т. Д. Сегодня я пытаюсь получить всплывающее окно, чтобы делать то, что я хочу, но я не могу его скользить по экрану. Я просто пытаюсь создать полезную справочную систему, которая может быть удалена из критического контента. – Rick