1

ToggleButton と Popup コントロールのポップアップ メニューを作成しています。これらはすべてキャンバスに含まれています。次の画像は、私のアプリケーションの右下隅のものです。キャンバスを設定して、それがインデックス 1 列にあり、2 列が伸び、2 番目から下の行にあるようにします。

ここに画像の説明を入力

灰色の画像は単なるプレースホルダーです。以下の XAML から、すべてをストレッチするように設定したことがわかります。キャンバスは伸びますが、他には何もしません。StackPanel や Label をコメントアウトしても何も起こりません。したがって、どちらも原因ではないと確信しています。ToggleButton が Canvas のサイズまで伸びていません。

ここに画像の説明を入力

スクリーンショットを撮ったので、関連する部分を強調することができました。しかし、コードを貼り付ける必要がある場合は、貼り付けることができます。

編集

更新された XAML:

<Border BorderBrush="Green" BorderThickness="1" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <Grid Name="ToggleButtonCanvas" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                    <ToggleButton x:Name="btnPluginMenu" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <ToggleButton.Template>
                            <ControlTemplate TargetType="{x:Type ToggleButton}">
                                <Border x:Name="bdr" BorderThickness="0">
                                    <Border.Background>
                                        <ImageBrush ImageSource="< omitted >" Stretch="Fill" TileMode="None" />
                                    </Border.Background>
                                    <ContentPresenter VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="8,6,8,6" ContentSource="Content" />
                                </Border>
                            </ControlTemplate>
                        </ToggleButton.Template>
                    </ToggleButton>
                    <Label Canvas.Left="10" Canvas.Top="10" Content="Menu" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
                </StackPanel>
                <Popup Placement="Relative"  HorizontalOffset="-120" VerticalOffset="-130" PlacementTarget="{Binding ElementName=btnPluginMenu}" IsOpen="{Binding ElementName=btnPluginMenu, Path=IsChecked}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" PopupAnimation="Scroll">
                    <Grid Background="Gray">
                        <Grid.BitmapEffect>
                            <DropShadowBitmapEffect />
                        </Grid.BitmapEffect>
                    </Grid>
                </Popup>
            </Grid>
        </Border>
4

1 に答える 1

8

Canvas は子要素を引き伸ばしません。代わりにグリッドを使用してください。

MSDNのCanvasドキュメントのコメントから:

キャンバスは、固有のレイアウト特性を持たない唯一のパネル要素です。Canvas が子要素のサイズを自動的に変更する要素の子でない限り、Canvas のデフォルトの Height プロパティと Width プロパティはゼロです。Canvas の子要素はサイズ変更されず、指定された座標に配置されるだけです。これにより、固有のサイズ制約や位置合わせが不要または不要な状況に柔軟に対応できます。子コンテンツを自動的にサイズ変更して配置する場合は、通常、Grid 要素を使用するのが最適です。

XAML で単純に置き換えることができCanvasます。Grid行または列を定義する必要はありません。

于 2013-02-11T15:05:36.600 に答える