这是我的XAML:
<Window x:Class="IPCapture.MainWindow"
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:IPCapture"
mc:Ignorable="d"
Title="IPCapture_GUI" Opacity="0.95" Background="Transparent" Foreground="White" FontFamily="Arial" FontSize="14" FontWeight="Bold" FontStretch="UltraExpanded" TextOptions.TextFormattingMode="Display" BorderThickness="0"
Loaded="Window_Loaded" WindowStartupLocation="CenterScreen" Height="Auto" Width="Auto" Cursor="Arrow" WindowStyle="None" AllowsTransparency="True" MouseLeftButtonDown="Window_MouseLeftButtonDown" Topmost="True" ResizeMode="CanResizeWithGrip">
<Window.OpacityMask>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="Black"/>
<GradientStop Color="#B2420000" Offset="1"/>
</LinearGradientBrush>
</Window.OpacityMask>
<Border CornerRadius="5" Background="#FFC20C0C" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto" Height="Auto">
<Grid x:Name="GridMain" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0">
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Keys" Width="Auto"/>
<ColumnDefinition x:Name="Values" Width="Auto"/>
</Grid.ColumnDefinitions>
</Grid>
<Border.Effect>
<DropShadowEffect Opacity="0.6" BlurRadius="1"/>
</Border.Effect>
</Border>
</Window>
我遵循了许多关于如何实现我想要的GUI的教程,我终于成功了!但是,它似乎没有提供我需要的功能。我想:
我的问题的可视化:
大褪色的蓝色区域是我的Window
,左上角的小GUI是我的实际小部件。
(包含在Border
中)
从我的代码中可以看出,我在ResizeMode="CanResizeWithGrip"
上设置了Window
。我能够完美地调整窗口大小但调整大小不会调整我的实际GUI大小。
(因为我的XAML是如何布局的)
因此,出于这个原因,我想以某种方式允许调整边框宽度而不是Window
。
增加:(如果可能)
Window
顶部的黑色小工具栏?Height
的{{1}}和Width
设置为Window
,它是如此之大?它不应该只扩展到它的内容吗?答案 0 :(得分:2)
让我们一次拿一个:
调整大小问题是因为您HorizontalAlignment="Left" VerticalAlignment="Top"
和Grid
上设置了Border
。这意味着该元素将测量其最小所需宽度&amp;高度并对齐左上角。如果你删除它,元素将(假设没有其他布局问题)调整大小以包含整个窗口。
为Auto
和Width
设置Height
(顺便说一下,这是默认设置)在窗口上的行为有所不同 - 它告诉操作系统 - 而不是WPF - 来确定初始大小(使用未公开的算法,因此不要依赖它)。如果您希望WPF将窗口大小调整为其内容所需的最小值,请设置SizeToContent="WidthAndHeight"
。
黑色小工具栏是VS 2015的新功能,仅在调试期间出现。您可以在VS中的实时可视树面板中将其关闭。
奖金提示:
我强烈建议您不要在整个可视树上应用Effect
。这是一个巨大的性能打击。您应该考虑使用SystemDropShadowChrome
。
同样适用于OpacityMask
。只需使用制服Opacity
,除非你真的需要那个渐变......即便如此,你最好还是使用均匀的不透明度和渐变画笔作为背景。