Wpf 编译后剪切的控件(SizeToContent属性)

Wpf 编译后剪切的控件(SizeToContent属性),wpf,xaml,Wpf,Xaml,在编辑模式下,我的文本块显示为我想要的。但是当我运行代码时,textBlock4被裁剪了!我想知道为什么以及如何纠正这一点,谢谢 XAML: <Window x:Class="CuttedControlAfterCompilation.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.c

在编辑模式下,我的文本块显示为我想要的。但是当我运行代码时,textBlock4被裁剪了!我想知道为什么以及如何纠正这一点,谢谢

XAML:

<Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
        mc:Ignorable="d"
        Title="Cutted Control After Compilation" Height="350" Width="525">

    <Grid>
        <StackPanel Orientation="Horizontal" Margin="0,50">
            <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
        </StackPanel>
    </Grid>

</Window>

图像:

<Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
        mc:Ignorable="d"
        Title="Cutted Control After Compilation" Height="350" Width="525">

    <Grid>
        <StackPanel Orientation="Horizontal" Margin="0,50">
            <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
        </StackPanel>
    </Grid>

</Window>


如果将
WindowStyle=“None”
添加到您的窗口中,文本块将不再被剪切。看见我认为原因是窗口边框使用了一些宽度

或者设置
SizeToContent=“WidthAndHeight”
,您将被设置。看

所以代码应该是

<Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
    mc:Ignorable="d"
    Title="Cutted Control After Compilation"
    SizeToContent="WidthAndHeight">
<Grid>
    <StackPanel Orientation="Horizontal" Margin="0,50">
        <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
        <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
        <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
        <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
    </StackPanel>
</Grid>


如果将
WindowStyle=“None”
添加到您的窗口中,文本块将不再被剪切。看见我认为原因是窗口边框使用了一些宽度

或者设置
SizeToContent=“WidthAndHeight”
,您将被设置。看

所以代码应该是

<Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
    mc:Ignorable="d"
    Title="Cutted Control After Compilation"
    SizeToContent="WidthAndHeight">
<Grid>
    <StackPanel Orientation="Horizontal" Margin="0,50">
        <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
        <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
        <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
        <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
    </StackPanel>
</Grid>


这是一个标准的窗口问题。您依赖于计算的宽度值,但它们会被三个窗口边框大小弄乱。正如Pouya Abadi所提到的,你可以把窗户开得更宽,这对这种情况来说是完美的。但这并不是一个好的解决办法

WPF是关于布局的。我会使用DockPanel使控件占据所有可用空间,或使网格列(1*、1*、1*、.75*)大小。我不知道你会从中得到什么

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width=".75*"/>
    </Grid.ColumnDefinitions>
    <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
    <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" FontSize="48" FontWeight="Bold" TextAlignment="Center" Grid.Column="1"/>
    <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" FontSize="48" FontWeight="Bold" TextAlignment="Center" Grid.Column="2"/>
    <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" FontSize="112" FontWeight="Bold" TextAlignment="Center" Grid.Column="3"/>
</Grid>


我个人不喜欢标准窗口,我使用一楼软件+我的窗口风格定制的ModernUI.WPF,它清除了现代的疯狂,让我完全控制它的外观。

这是一个标准窗口问题。您依赖于计算的宽度值,但它们会被三个窗口边框大小弄乱。正如Pouya Abadi所提到的,你可以把窗户开得更宽,这对这种情况来说是完美的。但这并不是一个好的解决办法

WPF是关于布局的。我会使用DockPanel使控件占据所有可用空间,或使网格列(1*、1*、1*、.75*)大小。我不知道你会从中得到什么

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width=".75*"/>
    </Grid.ColumnDefinitions>
    <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
    <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" FontSize="48" FontWeight="Bold" TextAlignment="Center" Grid.Column="1"/>
    <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" FontSize="48" FontWeight="Bold" TextAlignment="Center" Grid.Column="2"/>
    <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" FontSize="112" FontWeight="Bold" TextAlignment="Center" Grid.Column="3"/>
</Grid>


我个人不喜欢标准窗口,我使用一楼软件+我的窗口样式定制的ModernUI.WPF,它可以清除那种现代的疯狂,让我完全控制它的外观。

为什么不增加窗口的宽度呢

<Window ... Title="Cutted Control After Compilation" Height="350" Width="533">

这应该是一个简单的修复方法。

为什么不增加窗口的宽度呢

<Window ... Title="Cutted Control After Compilation" Height="350" Width="533">

这应该是一个简单的修复方法。

在某些情况下,我在使用
SizeToContent
属性时遇到问题。但是经过几次操作,我现在理解和使用它好多了

  • 麻烦
电网出现故障

  • 更正
用于网格

可能性1:指定
网格
宽度
高度
(不要让它们处于自动模式)

可能性4:将
MinWidth
MinHeight
的值设置为
网格的
Width
Height
(在这种情况下是自动的)

<Grid Margin="0,50" MinWidth="519" MinHeight="221">
可能性2:指定每个
TextBlock
高度(不要将其保留为自动)

  • 结论

    当标注为浮动(星形或自动)时,
    SizeToContent
    属性似乎会忽略控件中未使用的空格。这可以通过指定
    窗口包含的控件或其子控件的维度来解决

    因此,要从问题中提取XAML代码,可以通过将
    网格
    MinHeight
    设置为319并将
    SizeToContent=“widthandeheight”
    属性设置为窗口来更正

    <Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
    mc:Ignorable="d"
    Title="Cutted Control After Compilation" SizeToContent = "WidthAndHeight">
        <Grid MinHeight="319">
            <StackPanel Orientation="Horizontal" Margin="0,50">
                <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
                <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
                <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
                <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
            </StackPanel>
        </Grid>
    </Window>
    
    
    

我非常感谢@PouyaAbadi的贡献。

在某些情况下,我在使用
SizeToContent
属性时遇到问题。但是经过几次操作,我现在理解和使用它好多了

  • 麻烦
电网出现故障

  • 更正
用于网格

可能性1:指定
网格
宽度
高度
(不要让它们处于自动模式)

可能性4:将
MinWidth
MinHeight
的值设置为
网格的
Width
Height
(在这种情况下是自动的)

<Grid Margin="0,50" MinWidth="519" MinHeight="221">
可能性2:指定每个
TextBlock
高度(不要将其保留为自动)

  • 结论

    当标注为浮动(星形或自动)时,
    SizeToContent
    属性似乎会忽略控件中未使用的空格。这可以通过指定
    窗口包含的控件或其子控件的维度来解决

    因此,要从问题中提取XAML代码,可以通过将
    网格
    MinHeight
    设置为319并将
    SizeToContent=“widthandeheight”
    属性设置为窗口来更正

    <Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
    mc:Ignorable="d"
    Title="Cutted Control After Compilation" SizeToContent = "WidthAndHeight">
        <Grid MinHeight="319">
            <StackPanel Orientation="Horizontal" Margin="0,50">
                <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
                <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
                <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
                <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
            </StackPanel>
        </Grid>
    </Window>
    
    
    

我非常感谢@PouyaAbadi的贡献。

它是在哪里种植的?这两张照片在我看来都是一样的。仔细看看我刚刚重新加载的新图片@d、 我需要
    <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" Height="221" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
    <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" Height="221" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
    <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" Height="221" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
    <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="75" Height="221" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
<StackPanel Orientation="Horizontal" Margin="0,50" MinHeight="221">
<Window x:Class="CuttedControlAfterCompilation.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:CuttedControlAfterCompilation"
mc:Ignorable="d"
Title="Cutted Control After Compilation" SizeToContent = "WidthAndHeight">
    <Grid MinHeight="319">
        <StackPanel Orientation="Horizontal" Margin="0,50">
            <TextBlock x:Name="textBlock1" Background="#FFDEE2E4" Text="1" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock2" Background="#FFC7CCD0" Text="2" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
            <TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="73" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
        </StackPanel>
    </Grid>
</Window>