2

我有一个窗口,在窗口内,我有一个用户控件。我只想在按下 F11 时最大化或扩展(全屏)用户控件。我现有的代码适用于我的窗口,

if (e.Key == Key.F11)
{
    WindowStyle = WindowStyle.None;
    WindowState = WindowState.Maximized;
    ResizeMode = ResizeMode.NoResize;
}

但我需要为我的 UserControl 提供此功能。有没有类似的方法来最大化用户控制?请给我一些建议。提前致谢。

4

2 回答 2

3

我认为您不需要 PINvoke 即可在没有 Windows 工具栏的情况下获得全屏。这个想法是让您的用户控制并将其放置在您制作全屏的新窗口中。我就是这样做的。

private Window _fullScreenWindow;
private DependencyObject _originalParent;

if (e.Key == Key.F11)
{
  if(_fullScreenWindow == null) //go fullscreen
  {
    _fullScreenWindow = new Window(); //create full screen window
    _originalParent = _myUserControl.Parent;
    RemoveChild(_originalParent, this); //remove the user control from current parent
    _fullScreenWindow.Content = this; //add the user control to full screen window
    _fullScreenWindow.WindowStyle = WindowStyle.None;
    _fullScreenWindow.WindowState = WindowState.Maximized;
    _fullScreenWindow.ResizeMode = ResizeMode.NoResize;

    _fullScreenWindow.Show();
  }
  else //exit fullscreen
  { 
    var parent = Parent;
    RemoveChild(parent, this);
    _fullScreenWindow.Close();
    _fullScreenWindow = null;

    AddChild(viewerControlParent, this);
  }
}

RemoveChild(和 AddChild 类似)的实现可以在这个答案中找到: https ://stackoverflow.com/a/19318405

于 2015-12-08T10:10:09.247 回答
1

用户控件没有这样的东西。

我认为只有两件事我不确定你想要实现。

1) 你想要一个没有窗口工具栏的全屏,为此你必须调用PINvokes

WPF 没有内置属性来隐藏标题栏的关闭按钮,但您可以通过几行 P/Invoke 来实现。

首先,将这些声明添加到您的 Window 类中:

    private const int GWL_STYLE = -16;
    private const int WS_SYSMENU = 0x80000;
    [DllImport("user32.dll", SetLastError = true)]
    private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    [DllImport("user32.dll")]
    private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
    Then put this code in the Window's Loaded event:

var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);

你去了:没有更多的关闭按钮。您也不会在标题栏的左侧有一个窗口图标,这意味着没有系统菜单,即使您右键单击标题栏 - 它们都在一起。

请注意,Alt+F4 仍将关闭窗口。如果您不想让窗口在后台线程完成之前关闭,那么您也可以覆盖 OnClosing 并将 Cancel 设置为 true。

2)您想在对话框中显示此用户控件,然后您必须使用Window 类并将用户控件作为子控件放入其中

你目前拥有的对 Windows 来说是正确的,是的。如果不是这样,那么我只能认为您的目标是第一个?

于 2013-09-04T19:23:20.957 回答