如何调整具有位置(-1,-1)的子画面的画布完全显示

时间:2018-05-14 11:55:14

标签: wpf xaml

新信息!!! 同时我找到了一个解决方案,但是有一个新问题。 解决方案是将代码隐藏中的画布边距设置为厚度类型的新对象,顶部和左侧为1或2。 但画布正躺在一个tabcontrol上。 当我在选项卡之间切换或在画布上进行mousedown时,边距会丢失。

我在WPF应用程序上使用VS2015并且有一个非常奇怪的问题。

我的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>

0 个答案:

没有答案