我希望我的应用程序覆盖背景Canvas
Image
。 Canvas
将包含可以通过拖放重新定位(设置TextBlocks
,Top
)的对象(Left
等)。
应用程序需要有一些大小调整选项:None
,Fill
,Uniform
。或者用户可以设置特定尺寸。
当调整这些大小调整选项时,需要重新调整Canvas
,Image
和所有子对象的大小,以便所有内容都能正确“缩放”。换句话说,除了背景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)
以下是设置了Fill选项的应用程序(再次注意TextBlocks仍然存在)。
最后,这里是具有特定尺寸设置(1000 x 1000)的应用程序(注意TextBlocks保持其原始的Top和Left设置)。这不是我想要发生的事情。我希望它们相对于它们的起源重新定位。