使用Viewbox,Canvas和拖放项目调整大小

时间:2013-04-13 02:40:01

标签: .net wpf wpf-controls viewbox

我希望我的应用程序覆盖背景Canvas ImageCanvas将包含可以通过拖放重新定位(设置TextBlocksTop)的对象(Left等)。

应用程序需要有一些大小调整选项:NoneFillUniform。或者用户可以设置特定尺寸。

当调整这些大小调整选项时,需要重新调整CanvasImage和所有子对象的大小,以便所有内容都能正确“缩放”。换句话说,除了背景Image缩放之外,还需要正确地重新定位拖放项目。

我开始时使用Viewbox作为“容器”控件,所有内容似乎都“缩放”,只需将Stretch属性设置为None,Fill,Uniform选项。

<Viewbox x:Name="Viewbox">
   <Grid>
      <Image x:Name="Image" Stretch="Fill" Source="Background.bmp" />
      <Canvas x:Name="Canvas" Background="Transparent">
         <TextBlock Text="Test1" Background="Gray" Canvas.Top="170" Canvas.Left="50" />
         <TextBlock Text="Test2" Background="Gray" Canvas.Top="225" Canvas.Left="80" />
         <TextBlock Text="Test3" Background="Gray" Canvas.Top="170" Canvas.Left="150" />
      </Canvas>
   </Grid>
</Viewbox>

private void StretchModeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   this.Viewbox.Stretch = (Stretch)this.StretchModeComboBox.SelectedValue;
}

为了实现特定的尺寸调整,我天真地改变了画布,图像和视图框的尺寸。这里的问题是拖放对象没有正确重新定位。它们保持原始的Top,Left设置,这是不正确的。

private void ResizeButton_Click(object sender, RoutedEventArgs e)
{
   this.Viewbox.Stretch = Stretch.None;

   this.Viewbox.Height = this.Canvas.Height = this.Image.Height = Convert.ToDouble(this.HeightTextBox.Text);
   this.Viewbox.Width = this.Canvas.Width = this.Image.Width = Convert.ToDouble(this.WidthTextBox.Text);
}

为了实现特定的尺寸功能,我想我需要使用ScaleTransform来模拟高度/宽度变化?这听起来像是正确的方法吗?这样,当用户输入特定尺寸时,一切都会缩放。

如何将特定尺寸(高度/宽度)转换为参数以传递给比例变换?

以下是具有默认大小调整选项的应用程序(请注意带有灰色背景的TextBlocks - Test1,Test2,Test3)

enter image description here

以下是设置了Fill选项的应用程序(再次注意TextBlocks仍然存在)。

enter image description here

最后,这里是具有特定尺寸设置(1000 x 1000)的应用程序(注意TextBlocks保持其原始的Top和Left设置)。这不是我想要发生的事情。我希望它们相对于它们的起源重新定位。

enter image description here

0 个答案:

没有答案