繁体   English   中英

在WPF中调整边框NOT窗口的大小

[英]Resize border NOT window in WPF

这是我的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的教程,终于成功了! 但是,它似乎没有提供我需要的功能。 我想要:

  • 调整 GUI的宽度

我的问题的可视化:

WPF

蓝色的大区域是我的Window ,左上角的小GUI是我的实际小部件。
(附在Border

从代码中可以看到,我在Window上设置了ResizeMode="CanResizeWithGrip" 我能够完美调整窗口大小, 调整其大小不会调整我的实际GUI。
(由于XAML的布局方式)

因此,由于这个原因,我想以某种方式允许调整边框的宽度,而不是Window

补充:( 如果可能)

  • 是否可以删除以Window顶部为中心的黑色小工具栏?
  • 我也很困惑为什么,因为我已经将Window HeightWidth设置为Auto ,它那么大吗? 它不应该只扩大其内容的大小吗?

让我们一次来看一个:

  • 调整大小的问题是由于您在GridBorder上设置了HorizontalAlignment="Left" VerticalAlignment="Top" 这意味着元素将测量其所需的最小宽度和高度,并与左上方对齐。 如果删除此元素,则元素(假设没有其他布局问题)将调整大小以包含整个窗口。

  • WidthHeight设置为Auto (顺便说一下,这是默认设置)在窗口上的行为有所不同-它告诉OS-不是WPF-确定初始大小(使用未公开的算法,因此请不要依赖它)。 如果希望WPF将窗口调整为其内容所需的最小大小,请设置SizeToContent="WidthAndHeight"

  • 黑色的小工具栏是VS 2015的新功能,仅在调试期间显示。 您可以在VS的“实时视觉树”面板中将其关闭。

奖励提示:

  • 我强烈建议您不要在整个视觉树上应用Effect 这是巨大的性能损失。 您应该研究使用SystemDropShadowChrome

  • OpacityMask 除非确实需要渐变,否则就使用均匀的Opacity ...即使那样,使用均匀的不透明度和渐变画笔作为背景可能会更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM