1

キャンバスをレイアウトに組み込もうとして、たとえば横にコントロールがあり、キャンバスが描画領域である場合、キャンバスは他の要素とうまく連携していないようです。

たとえば、キャンバス以外のすべての要素を境界線で囲むことができるのはなぜですか? 次のコードでは、境界線がキャンバスをラップしますが、キャンバスの境界線は上にのみあり、左、右、または下にはありません:

<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 でわかることから、キャンバスに明示的な高さ/幅がなく、Horizo​​ntalAlignment がデフォルトで Border の中央にあることが問題のようです。明示的な高さと幅がない場合、Border は高さが 0 に折りたたまれ、幅に沿って伸びているように見えます。これは、Border を Grid に配置すると、Border が期待どおりに動作するため、Border が StackPanel にあるためだと思います。

最善の策は、Canvas に明示的な高さと幅を与えることです。それがあなたが探しているものかどうかはわかりません。

于 2009-02-12T14:07:05.293 に答える
0

あなたが達成しようとしていることを私が理解している限り、コントロールをグリッドの1つのセルに配置し、キャンバスを別のセルに配置する必要があります。

于 2009-02-12T15:40:15.117 に答える