2010-04-13 18 views
9

Uso de WPF .NET 4.0 en VS2010 RTM: No puedo crear una ventana emergente WPF a pantalla completa.No se puede crear una ventana emergente WPF a pantalla completa

Si creo una ventana emergente con un ancho del 50% y una altura del 100%, todo funciona bien, pero si intento crear una ventana emergente de "pantalla completa" con un ancho y una altura del 100%, se muestra al 100% de ancho y 75% de altura ... la parte inferior está truncada.

Nota: La anchura y la altura en realidad están siendo expresada en píxeles de código, estoy usando por ciento para hacer la situación un poco más comprensible ...

se "siente" como si hubiera algún tipo de límite evitando que el área de una ventana emergente exceda ~ 75% del área total de la pantalla.

ACTUALIZACIÓN: Aquí hay un ejemplo de Hello World que muestra el problema.

<Window x:Class="TechnologyVisualizer.PopupTest" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="PopupTest" 
     WindowStyle="None" WindowState="Maximized" Background="DarkGray"> 
    <Canvas x:Name="MainCanvas" Width="1920" Height="1080"> 
     <Popup Placement="Center" VerticalAlignment="Center" HorizontalAlignment="Center" Width="1900" Height="1060" Name="popContent"> 
      <TextBlock Background="Red">Hello World</TextBlock> 
     </Popup> 
     <Button Canvas.Left="50" Canvas.Top="50" Content="Menu" Height="60" Name="button1" Width="80" 
       FontSize="22" Foreground="White" Background="Black" Click="button1_Click" /> 
    </Canvas> 
</Window> 




using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 

namespace TechnologyVisualizer 
{ 
    /// <summary> 
    /// Interaction logic for PopupTest.xaml 
    /// </summary> 
    public partial class PopupTest : Window 
    { 
     public PopupTest() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      popContent.IsOpen = true; 
     } 

    } 
} 

Si ejecuta este fondo el 25% de la ventana emergente no aparece cuando se cambia el ancho de la ventana emergente para 500 entonces se irá altura completa

+1

¿Nos puede mostrar su código? –

+0

Encontré una referencia a este problema en los foros de Telerik que afirma que es un error en WPF: http://www.telerik.com/community/forums/wpf/draganddrop/drag-and-drop-between-a-window- and-a-popup.aspx # 1102369 – Scrappydog

Respuesta

11

Supongo que la limitación de tamaño (75% de la pantalla) es correcta. Está documentado aquí:

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.placementmode%28VS.85%29.aspx

La nota correspondiente no se encuentra en el .NET 4 docs. Creo que necesitarás usar otro método para obtener la pantalla completa. Normalmente uso una ventana maximizada, sin bordes y sin tamaño.

+0

Volqué la ventana emergente y cambié al uso de Windows. Gracias. – Scrappydog

0

no tengo una instalación de VS2010 en de la mano ahora mismo para probarlo, pero si esto resultara ser un error en WPF (como se menciona en un comentario), estoy seguro de que usando P/Invoke y this sample publicado por Raymond Chen debería hacerlo funcionar:

WINDOWPLACEMENT g_wpPrev = { sizeof(g_wpPrev) }; 

void OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) 
{ 
    DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE); 
    if (dwStyle & WS_OVERLAPPEDWINDOW) { 
    MONITORINFO mi = { sizeof(mi) }; 
    if (GetWindowPlacement(hwnd, &g_wpPrev) && 
     GetMonitorInfo(MonitorFromWindow(hwnd, 
         MONITOR_DEFAULTTOPRIMARY), &mi)) { 
     SetWindowLong(hwnd, GWL_STYLE, 
        dwStyle & ~WS_OVERLAPPEDWINDOW); 
     SetWindowPos(hwnd, HWND_TOP, 
        mi.rcMonitor.left, mi.rcMonitor.top, 
        mi.rcMonitor.right - mi.rcMonitor.left, 
        mi.rcMonitor.bottom - mi.rcMonitor.top, 
        SWP_NOOWNERZORDER | SWP_FRAMECHANGED); 
    } 
    } else { 
    SetWindowLong(hwnd, GWL_STYLE, 
        dwStyle | WS_OVERLAPPEDWINDOW); 
    SetWindowPlacement(hwnd, &g_wpPrev); 
    SetWindowPos(hwnd, NULL, 0, 0, 0, 0, 
       SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | 
       SWP_NOOWNERZORDER | SWP_FRAMECHANGED); 
    } 
} 

Disculpe por no ser más útil en este momento, pero creo que la muestra de C++ se puede convertir fácilmente a C# utilizando el correspondiente DllImport s. Consulte pinvoke.net para obtener más ayuda sobre cómo convertir esto en C#.

0

establecer el diálogo con los de a partir del código, en el constructor

public PopupTest() 
{ 
    InitializeComponent(); 
    this.Width = Window.Current.Bounds.Width; 
    this.Height = Window.Current.Bounds.Height; 
} 
Cuestiones relacionadas