1

私はこのことに多くの問題を抱えているので、ここに書き留めています。あなたが私を助けてくれることを願っています:P

すべての子の幅に収まる動的な StackPanel を作成したいと考えています。例を挙げます。

私の StackPanel が現在空であるとしましょう。その幅は 10 (fe) で、固定の高さは 30 です。次に、画像を追加したいので、次のように書き留めました。

BitmapImage myImage = new BitmapImage(new Uri("[PATH]"));
Image realImage = new Image();
realImage.Source = myImage;
realImage.Width = 50;
realImage.Height = myImage.Height;
myStackPanel.Children.Add(realImage);

ただし、StackPanel は 50px まで拡大しません。10pxに固執して、私の画像を切り取っています。TextBlocks などの他の UI 要素を追加しようとすると、同じことが起こります。

私は次のようなことをしようとしました

myStackPanel.Width += realImage.Width;

しかし、もちろんうまくいきませんでした。StackPanel の幅を「自動」に設定しようとしましたが、どちらも役に立ちませんでした。これは、XAML での StackPanel 宣言です。

<Window x:Name="MainWindow1" x:Class="Proj.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="myTitle" Height="480" Width="640"
    Loaded="onLoad" Background="Black" MinHeight="480" MinWidth="640">
    <Grid>
        ...(Other Closed Tags)...
        <StackPanel Orientation="Horizontal" Name="myStackPanel" Height="30" Margin="135,283,458,147"/>
    </Grid>
</Window>

画面上でマーキー効果を実行し、右から左にスライドする可変数のオブジェクトを含む動的バーを表示する必要があるため、StackPanel が必要です。オブジェクトの数も動的バーの最終的な幅もわかりません。

もちろん、それを行う別の方法があることを知っている場合は、それについて何かを学んでいただければ幸いです:)

ありがとうございました!

4

2 に答える 2

1

確認したところ、はい、問題はMarginです。Marginレイアウトでの絶対配置には使用しないでください。Margin親コントロールからのマージンオフセットとして使用する必要がありますが、要素を特定の境界にクリップするため、要素を配置しようとするとき (フォームの中央にアイテムを配置するなど) は避ける必要があります。

必要な効果は、auto幅で簡単に実現できますStackPanel

<StackPanel Orientation="Horizontal" Name="myStackPanel" Height="30">
        <Button>Hello</Button>
        <Button>World</Button>
</StackPanel>

明らかに-これをウィンドウの特定の場所に配置する必要がある場合は、コンテナの幅全体が利用可能であることを確認する必要があります-コントロールを使用HorizontalAlignmentGridて配置します

あなたのレイアウトから、私は次のようなものを提案します:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1.4*"></RowDefinition>
        <RowDefinition Height="30"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Grid.Row="1" Name="myStackPanel">
        <Button>Hello</Button>
        <Button>World</Button>
    </StackPanel>
</Grid>

絶対に必要な場合を除き、要素に明示的なサイズを指定することは避けます。親コンテナーでサイズを指定できる場合は、なおさらです。

内で画像を水平方向に整列させたい場合は、次のようにStackPanel設定できます。HorizontalAlignmentCenter

于 2013-09-24T16:21:17.623 に答える