2010-04-13 34 views
9

Sử dụng WPF .NET 4.0 trong VS2010 RTM: Tôi không thể tạo cửa sổ bật lên WPF toàn màn hình.Không thể tạo cửa sổ bật lên toàn màn hình WPF

Nếu tôi tạo cửa sổ bật lên có chiều rộng 50% và chiều cao 100% hoạt động tốt, nhưng nếu tôi cố tạo cửa sổ bật lên "toàn màn hình" có chiều rộng và chiều cao 100%, nó sẽ hiển thị ở độ rộng 100% và chiều cao 75% ... phần đáy bị cắt ngắn.

Lưu ý: Chiều rộng và chiều cao thực sự được bày tỏ bằng pixel trong mã, tôi đang sử dụng phần trăm để làm cho tình hình một chút hiểu thêm ...

It "cảm thấy" như có một số loại giới hạn ngăn chặn diện tích cửa sổ bật lên vượt quá ~ 75% tổng diện tích màn hình.

CẬP NHẬT: Đây là ví dụ Hello World hiển thị sự cố.

<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; 
     } 

    } 
} 

Nếu bạn chạy này đáy 25% popup thiếu nếu bạn thay đổi độ rộng của cửa sổ bật lên đến 500 sau đó nó sẽ đi đầy đủ chiều cao

+1

Ông có thể cho chúng ta thấy mã của bạn? –

+0

Tôi tìm thấy một tham chiếu đến vấn đề này trên diễn đàn Telerik tuyên bố đó là một lỗi trong WPF: http://www.telerik.com/community/forums/wpf/draganddrop/drag-and-drop-between-a-window- and-a-popup.aspx # 1102369 – Scrappydog

Trả lời

11

Đoán của bạn về giới hạn kích thước (75% màn hình) là chính xác. Nó ghi nhận ở đây:

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

Những lưu ý liên quan là mất tích từ NET 4 tài liệu. Tôi nghĩ bạn sẽ cần phải sử dụng một phương pháp khác để có được toàn màn hình. Tôi thường sử dụng một cửa sổ tối đa, không viền, không thể thay đổi kích cỡ.

+0

Tôi đã xóa cửa sổ bật lên và chuyển sang sử dụng cửa sổ. Cảm ơn. – Scrappydog

0

Tôi không có một cài đặt VS2010 tại tay ngay bây giờ để thử nó, nhưng nếu điều này sẽ trở thành một lỗi trong WPF (như đã đề cập trong một bình luận), tôi chắc chắn bằng cách sử dụng P/Invoke và this sample được đăng bởi Raymond Chen sẽ làm cho nó hoạt động:

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); 
    } 
} 

Xin lỗi vì không bị hữu ích hơn ngay bây giờ, nhưng tôi nghĩ rằng mẫu C++ có thể dễ dàng chuyển đổi sang C# bằng cách sử dụng DllImport s tương ứng. Hãy xem pinvoke.net để được trợ giúp thêm về cách chuyển tính năng này thành C#.

0

thiết lập với các hộp thoại từ mã, trong constructor

public PopupTest() 
{ 
    InitializeComponent(); 
    this.Width = Window.Current.Bounds.Width; 
    this.Height = Window.Current.Bounds.Height; 
} 
Các vấn đề liên quan