新信息!!! 同时我找到了一个解决方案,但是有一个新问题。 解决方案是将代码隐藏中的画布边距设置为厚度类型的新对象,顶部和左侧为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>