基本上我有一个SizeToContent="WidthAndHeight"
的窗口,我的底部有一个标签。调整窗口大小时,标签会消失。除非我把窗户做得更大。
我有以下XAML代码:
<Window x:Class="DateKeeper.View.Test"
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:DateKeeper.View"
mc:Ignorable="d"
Title="Test" SizeToContent="WidthAndHeight"
>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label x:Name="label" Content="Label" HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Column="0" Grid.Row="1" FontSize="36"/>
<TextBlock x:Name="textBlock" Grid.Column="1" Text="TextBlock" VerticalAlignment="Bottom" Grid.Row="1" FontSize="36"/>
</Grid>
</Window>
以下是图片:
调整大小之前
调整大小后
答案 0 :(得分:1)
SizeToWidthAndHeight
设置窗口的初始大小。它不会阻止用户调整窗口大小。
ResizeMode="NoResize"
会阻止所有调整大小。如果要设置最小大小并允许窗口大小大于此值,则不能在纯XAML中执行此操作。
但是,您可以使用初始大小作为最小宽度和高度,并在加载的处理程序中使用一些简单的代码,如下所示:
<Window
x:Class="DateKeeper.View.Test"
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:DateKeeper.View"
mc:Ignorable="d"
Title="Test"
SizeToContent="WidthAndHeight"
Loaded="Window_Loaded"
>
Test.xaml.cs(或者你称之为上述Window的代码隐藏):
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MinWidth = ActualWidth;
MinHeight = ActualHeight;
}
您还可以编写一个可以执行相同操作的附加属性。
这种带有Mode=OneTime
的纯XAML方法看起来很有希望:
<Window
...
SizeToContent="WidthAndHeight"
MinHeight="{Binding ActualHeight, RelativeSource={RelativeSource Self}, Mode=OneTime, PresentationTraceSources.TraceLevel=High}"
MinWidth="{Binding ActualWidth, RelativeSource={RelativeSource Self}, Mode=OneTime}"
...
...但是在跟踪输出中,我们看到它在窗口大小调整到其内容之前很早就得到ActualHeight
和ActualWidth
的值,也许在实际的UI窗口对象之前甚至是创建 - 当实际宽度和高度都报告为零时。
答案 1 :(得分:1)
你现在有50%
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label x:Name="label" Content="Label" FontSize="36"
Grid.Row="1" Grid.Column="0" VerticalAlignment="Bottom" HorizontalAlignment="Left" />
<TextBlock x:Name="textBlock" Text="TextBlock" FontSize="36"
Grid.Row="1" Grid.Column="1" VerticalAlignment="Bottom"/>
</Grid>
答案 2 :(得分:0)
不确定您要创建什么,但有三件事:
这些元素因为没有空间而离开了屏幕而失去了知名度
您的布局会将两个文本元素放在网格的第二行
一个。元素只有50%的可用高度来渲染
湾FontSize和Margins / Padding将进一步抵消此
您有两种不同的文本元素类型(Label和TextBlock)
一个。两者都有不同的边距/填充值
湾不同的布局值将导致不同的可见性级别
如果您不希望元素失去可见性,则需要设置窗口的最小大小(例如325x150)。