web-dev-qa-db-ja.com

コンテンツに合わせて自動サイズ調整するWPFウィンドウを取得する方法

2つのTextBlock、1つの進行状況バー、キャンセルボタンを含むダイアログがあります。

XAMLは次のとおりです。

Window x:Class="WpfApplication4.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:WpfApplication4"
    mc:Ignorable="d"
    Title="MainWindow" Height="Auto" Width="200">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock x:Name="txtFirst" Grid.Row="0"  Margin="5" TextWrapping="Wrap">This is a really really really really long string that wraps</TextBlock>
    <TextBlock x:Name="txtSecond" Grid.Row="1"  Margin="5" Text="A Shorter string" TextWrapping="Wrap" MaxWidth="200"/>
    <ProgressBar x:Name="prgProgress" Grid.Row="2" Margin="5" Height="20" />
    <Button x:Name="btnCancel" Grid.Row="3" Margin="5" Height="25" Width="50"/>
</Grid>

Windowの高さを固定せず、その子のサイズに基づいて高さを自動調整することを望んでいますが、これを行う方法はわかりません。ウィンドウの高さに何も割り当てない時点では、コンテンツよりもはるかに大きな高さが採用されているようです。 Windows Height = "Auto"に設定すると、同じことが起こります。 RowDefinitionsのすべての高さは「自動」に設定されています。これは、「行の高さを行の子の高さに設定する」ことを意味します。

助けてくれてありがとう。

17
Cleve

SizeToContentプロパティを使用する必要があります。以下のmsdnリンクを確認してください。

https://msdn.Microsoft.com/en-us/library/system.windows.window.sizetocontent(v = vs.110).aspx

27
Mohammed Arfain