Как включить Canvas в макет большего размера в WPF? - PullRequest
1 голос
/ 12 февраля 2009

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 ]

1 голос
/ 12 февраля 2009

Из того, что я могу сказать в XamlPad, проблема заключается в том, что ваш Canvas не имеет явной высоты / ширины, а его HorizontalAlignment по умолчанию находится в середине границы. Без явной высоты и ширины граница, кажется, сжимается до 0 высоты и растягивается по ширине. Я предполагаю, что это потому, что ваша граница находится в StackPanel, так как размещение границы в сетке приводит к тому, что она ведет себя как ожидалось.

Лучше всего дать холсту явную высоту и ширину. Не уверен, что это то, что вы ищете.

0 голосов
/ 12 февраля 2009

Насколько я понимаю, чего вы пытаетесь достичь, вы должны поместить свои элементы управления в одну ячейку сетки, а свой холст - в другую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...