簡體   English   中英

調整大小時如何防止窗口底部的標簽消失?

[英]How to prevent Labels on bottom of window from disappearing when resizing?

基本上,我有一個窗口是SizeToContent="WidthAndHeight" ,底部有一個Label。 調整窗口大小時,標簽消失。 除非我將窗口擴大很多。

我有以下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>

這是圖片:

調整大小之前

調整大小之前

調整大小后

調整大小后

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(或您所說的上述“窗口”背后的代碼):

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}"
    ...

...但是在跟蹤輸出中,我們看到它在窗口大小調整為其內容之前,很早就獲得了ActualHeightActualWidth的值,甚至可能在創建實際的UI窗口對象之前-在實際寬度和高度都報告為零。

你現在有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>

不確定要創建的內容,但有三件事:

  1. 元素正在消失,因為它們正在離開屏幕,因為空間不足

  2. 您的布局將兩個文本元素都放在網格的第二行

    一種。 元素將僅具有可用高度的50%進行渲染

    b。 字體大小和邊距/填充將進一步抵消

  3. 您有兩種不同的文本元素類型(Label和TextBlock)

    一種。 兩者具有不同的邊距/填充值

    b。 不同的布局值將導致不同程度的可見性

如果不想讓元素失去可見性,則需要設置窗口的最小尺寸(例如325x150)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM