【发布时间】:2011-03-10 12:27:58
【问题描述】:
我目前正在 Silverlight 中设计一个布局应用程序,并且在 Viewbox 内有一个 Canvas。我在画布上添加了形状,它们可以正常显示,当我调整视图框的大小以放大 2 倍高度和宽度时,一切仍然正常绘制。
当我尝试放大4 或更大的系数或0.5(缩小)时出现问题。
更新:水平线还在,只是没有画出来。其他形状和消失的形状之间的相互作用仍然存在
当我这样做时,任何水平线都不会重绘,但任何其他形状,其他的垂直线,仍然可以重绘。这些对象仍然是画布的子对象,它们的可见性都设置为可见。
发生了什么?
更新
非常简单的 XAML:
<ScrollViewer x:Name="scrollViewer"
Padding="0"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
IsTabStop="False"
Background="Beige">
<Viewbox x:Name="viewBox" Stretch="UniformToFill">
<Canvas x:Name="designCanvas"
Background="{Binding ElementName=mainControl, Path=Background, Mode=TwoWay}">
</Canvas>
</Viewbox>
</ScrollViewer>
这是我添加形状的方法:
Rectangle horGuide = new Rectangle()
{
Tag = "horGuide",
Fill = new SolidColorBrush(Colors.Cyan),
Height = 0.5,
Width = designCanvas.canvActualWidth*16,
};
int h = designCanvas.horOffset;
int v = designCanvas.vertOffset;
double d = e.GetPosition(sideRule).Y;
designCanvas.Children.Add(horGuide);
Canvas.SetTop(horGuide, ((d+v )/ designCanvas.zoomFactor));
Canvas.SetLeft(horGuide, 0 - h);
放大:
viewBox.Width *= 2;
viewBox.Height *= 2;
【问题讨论】:
-
很好,但该代码无法正常工作 Canvas.horOffset、Canvas.vertOffset 和 Canvas.zoomFactor 不作为画布属性存在
-
这些是我必须在我的程序中处理其他事情的属性,它们可以替换为滚动查看器的水平和垂直滚动偏移量。 Zoomfactor 是乘法的,具体取决于缩放量。只是将位置设置为我想要的位置,我认为这与这个问题无关,因为该位置似乎与哪些项目没有重绘无关。
-
您是否考虑过在画布上进行比例变换而不是视图框?
-
我没有,与视图框相比,这有什么优势,似乎比仅使用简单的视图框需要进行更多的计算?
标签: silverlight canvas redraw viewbox