突出WPF窗口的控件

本文关键字:控件 窗口 WPF 突出 | 更新日期: 2023-09-27 17:59:10

就像Fluent.RibbonWindow一样,我需要控件来粘贴窗口的标题/边框
我试着从类中提取RibbonWindow,但总是遇到麻烦。我就是做不到…
有人能帮我吗
我基本上需要将窗口的客户端区域扩展到整个窗口
我需要将客户端区域扩展到框架中,而不是将框架扩展到客户端区域!

突出WPF窗口的控件

自定义chrome功能允许应用程序控制窗口的外部框架,以便可以在标题栏上绘制WPF内容。

这听起来像您正在寻找的:WPF外壳集成库

我曾经在非客户端区域添加了一个Outlook样式的按钮,将其放置在一个无框架、最顶部和透明的窗口中。

这是该窗口继承的基类:

public class WindowHeaderButton : Window
{
    private readonly Window _owner;
    public WindowHeaderButton(Window owner)
    {
        _owner = owner;
        _owner.Loaded += owner_Loaded;
        _owner.LocationChanged += owner_LocationChanged;
        _owner.StateChanged += owner_StateChanged;
        _owner.SizeChanged += owner_SizeChanged;
        _owner.Deactivated += _owner_Deactivated;
        _owner.Activated += _owner_Activated;
        Activated += WindowHeaderButton_Activated;
        SizeToContent = SizeToContent.WidthAndHeight;
        WindowStyle = WindowStyle.None;
        AllowsTransparency = true;
        Background = new SolidColorBrush(Colors.Transparent);
        ShowInTaskbar = false;
    }
    void WindowHeaderButton_Activated(object sender, System.EventArgs e)
    {
        Opacity = 1;
    }
    void _owner_Activated(object sender, System.EventArgs e)
    {
        Opacity = 1;
    }
    void _owner_Deactivated(object sender, System.EventArgs e)
    {
        Opacity = 0.75;
    }
    private void owner_Loaded(object sender, RoutedEventArgs e)
    {
        Owner = _owner;
        Show();
        UpdatePosition();
    }
    private void owner_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        UpdatePosition();
    }
    private void owner_StateChanged(object sender, System.EventArgs e)
    {
        UpdatePosition();
    }
    private void owner_LocationChanged(object sender, System.EventArgs e)
    {
        UpdatePosition();
    }
    private void UpdatePosition()
    {
        Top = _owner.Top + 1;
        Left = _owner.Left + 8;
    }
}

正如你所注意到的,一个人必须自己处理很多窗口行为,比如活动状态和位置的更改,这很容易变得有点混乱。