Как настроить холст, чтобы дочерний элемент с позицией (-1, -1) отображался полностью - PullRequest
0 голосов
/ 14 мая 2018

НОВАЯ ИНФОРМАЦИЯ !!! Между тем я нашел решение, но появилась новая проблема. Решение состоит в том, чтобы установить поле canvas в code-behind для нового объекта типа Thickness с верхним и левым 1 или 2. Но холст лежит на табулировании. Когда я переключаюсь между вкладками или намазываю на холсте, поле теряется.


Я работаю с VS2015 над WPF-приложением и у меня очень любопытная проблема.

Я получил в одном из моих окон WPF холст в качестве родительского элемента для некоторых дочерних элементов.

Одним из этих элементов является прямоугольник, который должен показывать пользователю размер страницы DIN-A4.

Он добавляется в виде кода в дочернюю коллекцию холста.

Обычно я бы поместил этот прямоугольник в положение (0,0).

Но из-за некоторых проблем мне пришлось обмануть и установить позицию (-1, -1) следующим образом:

    public static System.Windows.Shapes.Rectangle GetRectangle(double top, double left, double width, double height)
    {
        var rectangle = new System.Windows.Shapes.Rectangle();
        System.Windows.Controls.Canvas.SetLeft(rectangle, -1);
        System.Windows.Controls.Canvas.SetTop(rectangle, -1);
        rectangle.Width = Math.Round(GetSizeInPoint(width)) + 2;
        rectangle.Height = Math.Round(GetSizeInPoint(height));
        rectangle.StrokeThickness = 1;
        rectangle.Stroke = System.Windows.Media.Brushes.Red;

        return rectangle;
    }

Но в результате этого видна лишь небольшая часть верхней и левой границы прямоугольника.

Есть ли у меня возможность "переместить" холст, чтобы прямоугольник отображался полностью?

Настоящим еще одним важным проблемным моментом является то, что Сетка с именем grdProtocolDesigner может быть сериализована в XML и сохранена в базе данных.

Так что полная реструктуризация была бы большой проблемой.

Вот соответствующая часть моего XAML, включая холст:

<ContentPresenter x:Name="protocolContainer"
                  Grid.Row="1"
                  Grid.Column="0">
    <ContentPresenter.Content>
        <Grid x:Name="grdProtocolDesigner"
              Grid.Row="1"
              Grid.Column="0">
            <ScrollViewer>
                <!--Important! The background of this panel has to be "Transparent" so that drag'n'drop-events can work.
                Otherwise the events are not fired.-->
                <Canvas x:Name="protocolDesignerPanel"
                        AllowDrop="True"
                        Visibility="{Binding DesignerPanelsVisibility}"
                        Width="2200" Height="4000"
                        MouseEnter="designerpanel_MouseEnter"
                        MouseLeave="designerpanel_MouseLeave"
                        MouseDown="designerpanel_MouseDown"
                        MouseMove="designerpanel_MouseMove"
                        MouseUp="designerPanel_MouseUp">
                    <Canvas.RenderTransform>
                        <ScaleTransform x:Name="scaleProtocolLayout"/>
                    </Canvas.RenderTransform>
                    <Canvas.Background>
                        <ImageBrush ImageSource="../../pictures/CanvasBackground.png"
                                    TileMode="Tile"
                                    Stretch="None"
                                    Viewport="0, 0, 10, 10"
                                    ViewportUnits="Absolute" />
                    </Canvas.Background>
                </Canvas>
            </ScrollViewer>
        </Grid>
    </ContentPresenter.Content>
</ContentPresenter>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...