在编辑模式下,我的textBlocks显示为我想要的。但是当我运行代码时,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>
图片:
答案 0 :(得分:1)
如果您在窗口中添加WindowStyle="None"
,则不会再剪切文本块。见Window.WindowStyle Property。我相信原因是窗口边框使用了一些宽度
或者设置SizeToContent="WidthAndHeight"
,您将被设置。见Window.SizeToContent Property
所以代码是
<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>
答案 1 :(得分:1)
在某些情况下,我无法使用SizeToContent
属性。但是经过几次操作之后,我现在理解并使用得更好了。
麻烦
Grid
<Grid Margin="0,50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="148*"/>
<ColumnDefinition Width="148*"/>
<ColumnDefinition Width="148*"/>
<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" Grid.Column="1" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
<TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Grid.Column="2" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
<TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Grid.Column="3" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
</Grid>
Image : The SizeToContent
property narrows the dimensions of the Grid
.
麻烦
StackPanel
<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="75" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
</StackPanel>
Image : The SizeToContent
property narrows the height of the StackPanel
.
适用于网格
可能性1:指定Width
的{{1}}和Height
(不要将它们保留为自动。)。
Grid
可能性2:设置Pixel中行的值,以及每列的值。
<Grid Width="519" Height="221" Margin="0,50">
可能性3:指定每个 <Grid.RowDefinitions>
<RowDefinition Height="221"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="148"/>
<ColumnDefinition Width="148"/>
<ColumnDefinition Width="148"/>
<ColumnDefinition Width="75"/>
</Grid.ColumnDefinitions>
的{{1}}和Width
(不要将它们保留为自动。)。
Height
可能性4:将TextBlock
和 <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" Grid.Column="1" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
<TextBlock x:Name="textBlock3" Background="#FFAEB5B9" Text="3" Width="148" Height="221" Grid.Column="2" FontSize="48" FontWeight="Bold" TextAlignment="Center"/>
<TextBlock x:Name="textBlock4" Background="#FFB29AC5" Text="4" Width="75" Height="221" Grid.Column="3" FontSize="112" FontWeight="Bold" TextAlignment="Center"/>
的值设置为MinWidth
和MinHeight
(在本例中为自动){{1} }。
Width
适用于StackPanel
可能性1:指定Height
的{{1}}(不要将其保留为自动。)
Grid
可能性2:指定每个<Grid Margin="0,50" MinWidth="519" MinHeight="221">
的{{1}}(不要将其保留为自动。)。
Height
可能性3:将StackPanel
的值设置为<StackPanel Height="221" Orientation="Horizontal" Margin="0,50">
的{{1}}(在本例中为自动)。
Height
<强>结论强>
当维度浮动(星形或自动)时,TextBlock
属性似乎忽略控件中未使用的空格。这可以通过指定 <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"/>
包含的控件的维度或其子控件的维度来解决。
因此,要从问题中获取XAML代码,可以通过将MinHeight
Height
设置为319并将StackPanel
属性设置为Window来更正。
<StackPanel Orientation="Horizontal" Margin="0,50" MinHeight="221">
我非常感谢@PouyaAbadi的贡献。
答案 2 :(得分:0)
这是标准窗口问题。您依赖于计算出的宽度值,但它们会被 ThreeD 窗口边框大小混淆。 Pouya Abadi提到,你可以把窗户做得更宽,这对于这种情况来说是完美的。但这不是一个好的解决方案恕我直言。
WPF完全是关于布局。我使用 DockPanel 来使contol占用所有可用空间,或网格列(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>
我个人不喜欢标准窗口,我使用First Floor Software +我的窗口样式定制的ModernUI.WPF,它可以清除现代的疯狂,让我完全控制它的外观。
答案 3 :(得分:0)
为什么不直接增加窗口的宽度?
<Window ... Title="Cutted Control After Compilation" Height="350" Width="533">
如上所述,另一个选项是将窗口的SizeToContent
属性设置为WidthAndHeight
或仅Width
:
<Window ... SizeToContent="WidthAndHeight">
这应该是一个简单的解决方法。