【发布时间】:2013-02-27 03:31:48
【问题描述】:
我想要得到的是对控件集合进行缩放但保留此控件子集的宽度、高度和位置的任何方法。我已经看到问题How to keep element size while WPF zoom in and out?,似乎非常符合我的要求,但没有得到回答,也不是很明确,所以会改进问题。
目前我正在使用为 .net 框架 4.0 扩展的 WPF 工具包附带的 Zoombox 控件,但我可以更改它。我的结构如下:
<Border x:Name="drawRegionBorder" Grid.Column="1" Grid.Row="1" d:LayoutOverrides="Width, Height" BorderThickness="1" CornerRadius="4" BorderBrush="{StaticResource BorderBrush}" >
<xctk:Zoombox x:Name="zoomBox">
<Grid x:Name="drawRegion" Height="{Binding Height}" Width="{Binding Width}" HorizontalAlignment="Left" VerticalAlignment="Top" Background="{DynamicResource DrawBackgroundBrush}">
<Image Source="{Binding Image}" ... />
<ListBox x:Name="points" ItemsSource="{Binding Points}">
<ListBox.Template>
<ControlTemplate>
<Canvas IsItemsHost="True"/>
</ControlTemplate>
</ListBox.Template>
</ListBox>
<ListBox x:Name="paths" ItemsSource="{Binding SomePaths}">
<ListBox.Template>
<ControlTemplate>
<Canvas IsItemsHost="True"/>
</ControlTemplate>
</ListBox.Template>
</ListBox>
<!--... Others ...-->
</Grid>
</xctk:Zoombox>
</Border>
我在这里有几个列表框,在一个网格中,每个列表框的项目面板都是一个画布,所以每个子项(但图像)都将位于画布内,并且每个子项都将设置Canvas.X 和 Canvas.Y 属性。所以我想要的是任何方式进行缩放(放大或缩小),并保持点(椭圆)或路径的大小......
由于缩放,是 wpf 的缩放转换,我想可能是在放大时执行此操作的一种方法,将缩小到要保持大小的控件,反之亦然。
混合设计器是一个典型的行为示例,例如,当您放大具有行和列的网格时,列指示器保持原始大小,类似的东西就是我想要的点和路径。
我会欣赏任何解决方案,可能是库、附加属性、行为或代码。 谢谢
【问题讨论】: