内容简介:翻译自:https://stackoverflow.com/questions/13712218/how-to-create-a-wpf-window-without-a-border-that-can-be-resized
中有没有办法可以删除主窗口的边框,但允许调整窗口大小(没有夹点)?
我意识到有一种方法可以通过将调整大小模式设置为CanResizeWithGrip来完成此方案.但是,我希望能够将调整大小模式设置为CanResize.
我尝试设置以下内容:
ResizeMode="CanResize" WindowStyle="None" AllowsTransparency="True"
但是,通过设置allowsTransparency,它将删除没有夹点时调整大小的功能.我有什么想法可以解决这个问题吗?
我还应该注意,无论如何我都不能将AllowTransparency设置为true,因为我在我的窗口中使用了winformshost控件,当AllowTransparency为true时,它不显示.
我知道这是一个老问题,但我只想为新人提出一个工作样本.
Xaml窗口:
<Window x:Class="CustomWindowDemo.DemoCustomWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:CustomWindowDemo" mc:Ignorable="d" Title="DemoCustomWindow" Height="300" Width="300" Background="{x:Null}" AllowsTransparency="True" WindowStyle="None"> <Window.Resources> <Style x:Key="BorderThumb" TargetType="Thumb"> <Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Thumb"> <Rectangle MinWidth="4" MinHeight="4" StrokeThickness="0"> <Rectangle.Fill> <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}" Opacity="0.05"/> </Rectangle.Fill> </Rectangle> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Border BorderBrush="#55FFFFFF" BorderThickness="1" CornerRadius="5"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Border MouseMove="Header_MouseMove" DockPanel.Dock="Top" Height="32" Grid.Row="1" Grid.Column="1"> <Border.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,3"> <GradientStop Color="#3BB2EA" Offset="0" /> <GradientStop Color="#EFF7FA" Offset="0.3" /> </LinearGradientBrush> </Border.Background> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10,0,0,0" Text="{Binding Path=Title, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/> <Button x:Name="btn_Minimize" Background="{x:Null}" BorderBrush="{x:Null}" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" BorderThickness="0" Click="btn_Minimize_Click" Grid.Column="1"> <Image Source="Resources/Ahmadhania-Spherical-Minimize.ico"/> </Button> <Button x:Name="btn_Maximize" Background="{x:Null}" BorderBrush="{x:Null}" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" BorderThickness="0" Grid.Column="2" Click="btn_Maximize_Click"> <Image Source="Resources/1412181205_61002.ico"/> </Button> <Button x:Name="btn_Close" Background="{x:Null}" BorderBrush="{x:Null}" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" BorderThickness="0" Grid.Column="3" Click="btn_Close_Click"> <Image Source="Resources/Ahmadhania-Spherical-Close(1).ico"/> </Button> </Grid> </Border> <Thumb x:Name="ThumbBottom" DragDelta="ThumbBottom_DragDelta" HorizontalAlignment="Stretch" Cursor="SizeNS" Grid.Column="0" Background="{x:Null}" Margin="3,0" Grid.ColumnSpan="3" Grid.Row="3" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}"/> <Thumb x:Name="ThumbTop" DragDelta="ThumbTop_DragDelta" HorizontalAlignment="Stretch" Cursor="SizeNS" Grid.Column="0" Background="{x:Null}" Margin="3,0" Grid.ColumnSpan="3" Height="4" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}"/> <Thumb x:Name="ThumbBottomRightCorner" DragDelta="ThumbBottomRightCorner_DragDelta" HorizontalAlignment="Right" Cursor="SizeNWSE" Grid.Row="3" Grid.Column="3" Background="{x:Null}" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}"/> <Thumb x:Name="ThumbTopRightCorner" DragDelta="ThumbTopRightCorner_DragDelta" HorizontalAlignment="Right" Cursor="SizeNESW" Grid.Row="0" Grid.Column="2" Background="{x:Null}" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}"/> <Thumb x:Name="ThumbTopLeftCorner" DragDelta="ThumbTopLeftCorner_DragDelta" HorizontalAlignment="Left" Cursor="SizeNWSE" Grid.Row="0" Grid.Column="0" Background="{x:Null}" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}" /> <Thumb x:Name="ThumbBottomLeftCorner" DragDelta="ThumbBottomLeftCorner_DragDelta" HorizontalAlignment="Left" Cursor="SizeNESW" Grid.Row="3" Grid.Column="0" Background="{x:Null}" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}" /> <Thumb x:Name="ThumbRight" DragDelta="ThumbRight_DragDelta" Cursor="SizeWE" Grid.Column="2" Grid.RowSpan="4" Background="{x:Null}" Margin="0,3" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}"/> <Thumb x:Name="ThumbLeft" DragDelta="ThumbLeft_DragDelta" Cursor="SizeWE" Grid.Column="0" Grid.RowSpan="4" HorizontalContentAlignment="Right" Background="{x:Null}" Margin="0,3" Style="{Binding Mode=OneWay, Source={StaticResource BorderThumb}}"/> <Grid x:Name="Grid_Content" Background="#EFF7FA" Grid.Row="2" Grid.Column="1"> </Grid> </Grid> </Border> </Window>
C#代码背后:
using System.Windows.Interop; using winforms = System.Windows.Forms; namespace CustomWindowDemo { /// <summary> /// Interaction logic for DemoCustomWindow.xaml /// </summary> public partial class DemoCustomWindow : Window { bool Maximized = false; int NormalWidth = 0; int NormalHeight = 0; int NormalX = 0; int NormalY = 0; public DemoCustomWindow() { InitializeComponent(); } #region Header & Resize void Header_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed) this.DragMove(); } void ThumbBottomRightCorner_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Width + e.HorizontalChange > 10) this.Width += e.HorizontalChange; if (this.Height + e.VerticalChange > 10) this.Height += e.VerticalChange; } void ThumbTopRightCorner_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Width + e.HorizontalChange > 10) this.Width += e.HorizontalChange; if (this.Top + e.VerticalChange > 10) { this.Top += e.VerticalChange; this.Height -= e.VerticalChange; } } void ThumbTopLeftCorner_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Left + e.HorizontalChange > 10) { this.Left += e.HorizontalChange; this.Width -= e.HorizontalChange; } if (this.Top + e.VerticalChange > 10) { this.Top += e.VerticalChange; this.Height -= e.VerticalChange; } } void ThumbBottomLeftCorner_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Left + e.HorizontalChange > 10) { this.Left += e.HorizontalChange; this.Width -= e.HorizontalChange; } if (this.Height + e.VerticalChange > 10) this.Height += e.VerticalChange; } void ThumbRight_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Width + e.HorizontalChange > 10) this.Width += e.HorizontalChange; } void ThumbLeft_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Left + e.HorizontalChange > 10) { this.Left += e.HorizontalChange; this.Width -= e.HorizontalChange; } } void ThumbBottom_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Height + e.VerticalChange > 10) this.Height += e.VerticalChange; } void ThumbTop_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) { if (this.Top + e.VerticalChange > 10) { this.Top += e.VerticalChange; this.Height -= e.VerticalChange; } } void btn_Minimize_Click(object sender, RoutedEventArgs e) { WindowState = WindowState.Minimized; } void btn_Maximize_Click(object sender, RoutedEventArgs e) { if (Maximized == true) { this.Width = NormalWidth; this.Height = NormalHeight; this.Left = NormalX; this.Top = NormalY; Maximized = false; Thumbs(); } else { NormalX = (int)this.Left; NormalY = (int)this.Top; NormalHeight = (int)this.Height; NormalWidth = (int)this.Width; this.Left = winforms.Screen.FromHandle(new WindowInteropHelper(this).Handle).WorkingArea.Left; this.Top = winforms.Screen.FromHandle(new WindowInteropHelper(this).Handle).WorkingArea.Top; this.Width = winforms.Screen.FromHandle(new WindowInteropHelper(this).Handle).WorkingArea.Width; this.Height = winforms.Screen.FromHandle(new WindowInteropHelper(this).Handle).WorkingArea.Height; Maximized = true; Thumbs(); } } void btn_Close_Click(object sender, RoutedEventArgs e) { Close(); } void Thumbs() { if (Maximized == true) { ThumbBottom.Visibility = Visibility.Collapsed; ThumbLeft.Visibility = Visibility.Collapsed; ThumbTop.Visibility = Visibility.Collapsed; ThumbRight.Visibility = Visibility.Collapsed; ThumbTopLeftCorner.Visibility = Visibility.Collapsed; ThumbTopRightCorner.Visibility = Visibility.Collapsed; ThumbBottomLeftCorner.Visibility = Visibility.Collapsed; ThumbBottomRightCorner.Visibility = Visibility.Collapsed; } else { ThumbBottom.Visibility = Visibility.Visible; ThumbLeft.Visibility = Visibility.Visible; ThumbTop.Visibility = Visibility.Visible; ThumbRight.Visibility = Visibility.Visible; ThumbTopLeftCorner.Visibility = Visibility.Visible; ThumbTopRightCorner.Visibility = Visibility.Visible; ThumbBottomLeftCorner.Visibility = Visibility.Visible; ThumbBottomRightCorner.Visibility = Visibility.Visible; } } #endregion } }
翻译自:https://stackoverflow.com/questions/13712218/how-to-create-a-wpf-window-without-a-border-that-can-be-resized
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java和Android开发学习指南(第二版)
Budi Kurniawan / 李强 / 人民邮电出版社 / 2016-3 / 69.00元
本书是Java语言学习指南,特别针对使用Java进行Android应用程序开发展开了详细介绍。 全书共50章,分为两大部分。第1部分(第1章到第22章)主要介绍Java语言基础知识及其功能特性。第2部分(第23章到第50章)主要介绍如何有效地构建Android应用程序。 本书适合任何想要学习Java语言的读者阅读,特别适合想要成为Android应用程序开发人员的读者学习参考。一起来看看 《Java和Android开发学习指南(第二版)》 这本书的介绍吧!