1

我正在创建一个弹出菜单、一个 ToggleButton 和一个 Popup 控件。所有这些都包含在画布中。下图是我的应用程序的右下角。我将 Canvas 设置为位于 Index 1 列,延伸 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 的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。Canvas 的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有尺寸约束或对齐的情况提供了灵活性。对于您希望子内容自动调整大小和对齐的情况,通常最好使用 Grid 元素。

您可以在 XAML中简单地替换Canvas为。Grid无需定义行或列。

于 2013-02-11T15:05:36.600 回答