Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么WPF在我运行程序时剪切组件_C#_Wpf - Fatal编程技术网

C# 为什么WPF在我运行程序时剪切组件

C# 为什么WPF在我运行程序时剪切组件,c#,wpf,C#,Wpf,我正在做一个WPF程序,带有一些文本框、标签和按钮。 使用XAML设计器,它工作正常,组件按其应有的方式显示。但当我运行程序时,窗口似乎变短,并在侧面切割了一些组件 为什么只有在我运行程序时才会剪切组件(按钮和标签) 以下是两个受影响组件的Xaml代码: <Window x:Class="XML_Edit.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x

我正在做一个WPF程序,带有一些文本框、标签和按钮。 使用XAML设计器,它工作正常,组件按其应有的方式显示。但当我运行程序时,窗口似乎变短,并在侧面切割了一些组件

为什么只有在我运行程序时才会剪切组件(按钮和标签)

以下是两个受影响组件的Xaml代码:

<Window x:Class="XML_Edit.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:XML_Edit"
    mc:Ignorable="d"
    Title="XML_Edit" Height="380" Width="470" ResizeMode="NoResize" Icon="Imagenes/xml.png">

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Style.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="CornerRadius" Value="4" />
            </Style>
        </Style.Resources>
    </Style>

    <Style TargetType="{x:Type TextBox}">
        <Style.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="CornerRadius" Value="4" />
            </Style>
        </Style.Resources>
    </Style>

</Window.Resources>

<Grid Background="#FF363944">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="49*"/>
        <ColumnDefinition Width="183*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="15"/>
        <RowDefinition Height="80"/>
        <RowDefinition Height="80"/>
        <RowDefinition Height="45"/>
        <RowDefinition Height="50*"/>
    </Grid.RowDefinitions>

    <!-- Components -->
    <Button Name="btCambiarContenido" Grid.Row="4" Content="Cambiar Contenido" VerticalAlignment="Center" HorizontalAlignment="Left" VerticalContentAlignment="Center" Margin="26,80,0,16" Height="36" Width="135" Click="BtCambiarContenido_Click" TabIndex="5" Background="{x:Null}" BorderBrush="#FF4EB8CE" FontSize="14" Grid.ColumnSpan="2" Foreground="#FF4EB8CE"/>

    <Label Name="lbSeleccionarRuta" Grid.Row="1" ToolTip="Seleccionar archivo" Height="32" Width="32" Margin="293.333,32,41,16" MouseDown="LbSeleccionarRuta_MouseDown" Grid.Column="1">
        <Label.Style>
            <Style TargetType="Label">
                <Setter Property="Background">
                    <Setter.Value>
                        <ImageBrush ImageSource="Imagenes/folder_azul.png"/>
                    </Setter.Value>
                </Setter>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background">
                            <Setter.Value>
                                <ImageBrush ImageSource="Imagenes/folder_gris.png"/>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Label.Style>
    </Label>
</Grid>

它们在WPF编辑器中显示良好:

但当我运行程序时,它们会被切断:

您将按钮高度设置为36像素,并将边距设置为26,80,0,16。这实际上是告诉布局管理器,您希望保留36+80+16=132像素以容纳第4行中的按钮

同时,在网格布局中,指定行0-3保留15+80+80+45像素。再加上您为按钮预留的132个按钮,即352。但是,您还明确地将窗口高度设置为380,这不仅要适应352个客户区像素,还要适应边框和标题(作为一个实验,将
WindowStyle
设置为
None
以删除边框和标题栏,您将再次看到完整的控件)。布局管理器必须在某个位置剪切像素,因为第4行是唯一一个您用“*”指定的像素,所以按钮的顶部和底部也会被剪切。你在designer中看不到这一点的原因是它对你的操作系统使用了不同的主题,这考虑了屏幕DPI、Windows主题设置、可访问性和其他一些因素;designer中的标题栏只是稍微小一点


这类问题是您在WPF中进行显式像素布局时必须小心的众多原因之一,也是您必须特别小心边距的原因。

您将按钮高度设置为36像素,并将边距设置为26,80,0,16。这实际上是告诉布局管理器,您希望保留36+80+16=132像素以容纳第4行中的按钮

同时,在网格布局中,指定行0-3保留15+80+80+45像素。再加上您为按钮预留的132个按钮,即352。但是,您还明确地将窗口高度设置为380,这不仅要适应352个客户区像素,还要适应边框和标题(作为一个实验,将
WindowStyle
设置为
None
以删除边框和标题栏,您将再次看到完整的控件)。布局管理器必须在某个位置剪切像素,因为第4行是唯一一个您用“*”指定的像素,所以按钮的顶部和底部也会被剪切。你在designer中看不到这一点的原因是它对你的操作系统使用了不同的主题,这考虑了屏幕DPI、Windows主题设置、可访问性和其他一些因素;designer中的标题栏只是稍微小一点


这类问题是您在WPF中进行显式像素布局时必须小心的众多原因之一,也是您必须特别小心边距的原因。

因为您永远无法信任XAML设计器,我猜您只是使用了拖放功能,并在项目中移动。它在设计器中可能看起来不错,但在运行程序时,您不能信任它。这是一个简单的答案,也是它为什么会被削减的原因:因为你的网格宽度和高度以及窗口宽度和高度的组合小于项目所需的空间。你的
网格布局不正确,看看文章吧,如何正确地做到这一点(如或)投票保持开放。这是一个非常有效的问题,有着接近mcve和直截了当的答案。因为你永远不会相信XAML设计器,我猜你只是使用拖放和移动项目。它在设计器中可能看起来不错,但在运行程序时,您不能信任它。这是一个简单的答案,也是它为什么会被削减的原因:因为你的网格宽度和高度以及窗口宽度和高度的组合小于项目所需的空间。你的
网格布局不正确,看看文章吧,如何正确地做到这一点(如或)投票保持开放。这是一个非常有效的问题,有着接近mcve和直截了当的答案。谢谢你的回答!我来看看。谢谢你的回答!我来看看。