wpf - 如何制作具有默认标题栏功能的透明 WPF 窗口?

标签 wpf

我正在使用 WPF 编写一个小应用程序。我想让窗口的内部位透明,带有不透明的控件,而标题栏(以及移动、最小化、最大化、调整大小、关闭等的能力)保持稳定。

但是由于某种原因,WPF 不允许我在将 AllowTransparency 设置为 true 时使用默认标题栏,这迫使我将 WindowStyle 设置为 None,这不是我想要的。有解决方法吗?

我的应用程序和问题并不是那么先进,以至于从头开始是一个问题。

最佳答案

要实现窗口透明,需要设置如下

WindowStartupLocation="CenterScreen"
AllowsTransparency ="True"
WindowStyle="None"
Background="Transparent"

最大化、最小化、关闭都可以自己实现:

XAML:
  <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Rectangle Fill="Brown" MouseLeftButtonDown="Rectangle_MouseLeftButtonDown"></Rectangle>
    <WrapPanel HorizontalAlignment="Right" VerticalAlignment="Top" Height="30" Width="Auto">
        <Button Width="20" Height="20" Margin="5" Click="Button_Click_1">_</Button>
        <Button Width="20" Height="20" Margin="5" Click="Button_Click_2">口</Button>
        <Button Width="20" Height="20" Margin="5" Click="Button_Click_3">X</Button>
    </WrapPanel>
</Grid>

代码:
    /// <summary>
    /// Min
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        if (this.WindowState != WindowState.Minimized)
        {
            this.WindowState = WindowState.Minimized;
        }
    }

    /// <summary>
    /// Max
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        if (this.WindowState != WindowState.Maximized)
        {
            this.WindowState = WindowState.Normal;
        }
    }

    /// <summary>
    /// Close
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Button_Click_3(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

    /// <summary>
    /// DragMove
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Rectangle_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        this.DragMove();
    }

关于wpf - 如何制作具有默认标题栏功能的透明 WPF 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447212/

相关文章:

c# - 首次加载窗口时隐藏 WPF 验证错误

wpf - 智能客户端Winform vs MVVM + Prism

c# - WPF:Scrollviewer里面的ListView;布局问题

c# - 从 WPF 中的不同位置访问表单

c# - 带有 Caliburn.micro 的动态 DataGrid 列

wpf - TreeView 索引 - ScrollIntoView?

c# - 如何获取 WPF 用户控件可见部分的大小?

wpf - 如何使用单选按钮 "IsChecked"属性控制文本框的可见性?

c# - 关注 ListView 控件的第一个元素 WPF

c# - 使用文本框和自定义词典进行拼写会减慢我在 C# WPF 中的应用程序