1

当您尝试将 Canvas 构建到布局中并在侧面具有例如控件并且 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>
4

2 回答 2

1

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

你最好的选择是给画布一个明确的高度和宽度。不确定那是您正在寻找的东西。

于 2009-02-12T14:07:05.293 回答
0

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

于 2009-02-12T15:40:15.117 回答