如何在WPF中将Canvas合并到更大的布局中?

时间:2009-02-12 13:46:57

标签: wpf canvas

当您尝试将其构建到布局中时,Canvas似乎与其他元素很好地结合在一起并且例如侧面的控件和画布是绘图区域。

例如,为什么我可以在除画布之外的每个元素周围放置边框?在下面的代码中,border包装了canvas,但是canvas只有顶部的边框,而不是左边,右边或底部:

<Window x:Class="WpfApplication25.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>

        <TextBlock DockPanel.Dock="Bottom" Text="Move the slider to reveal the answer:"/>
        <Slider DockPanel.Dock="Bottom" Name="theSlider" 
            HorizontalAlignment="Left" 
            Width="200" 
            Minimum="0" 
            Maximum="1" 
            Value="1" 
            Cursor="Hand"/>

        <Border BorderBrush="Tan" BorderThickness="2">
            <Canvas>
                <TextBlock Canvas.Left="45" Canvas.Top="50" Text="test" FontSize="16"/>
                <Rectangle 
                    Canvas.Left="10" 
                    Canvas.Top="10" 
                    Width="100" 
                    Height="100" 
                    Fill="Silver" 
                    Opacity="{Binding ElementName=theSlider, Path=Value}"
                    />
            </Canvas>
        </Border>
    </StackPanel>
</Window>

2 个答案:

答案 0 :(得分:1)

从我在XamlPad中可以看出,问题似乎是你的Canvas没有明确的高度/宽度,而且它的Horizo​​ntalAlignment默认位于Border的中间。如果没有明确的高度和宽度,边框似乎会折叠到0高度并在宽度上拉伸。我的假设是因为你的Border在StackPanel中,因为将Border放在一个Grid中,会使它按预期运行。

最好的办法是给Canvas一个明确的高度和宽度。不确定那是你想要的。

答案 1 :(得分:0)

据我了解您要实现的目标,您应该将控件放在Grid的一个单元格中,将Canvas放在另一个单元格中。