c# – WPF Canvas Scaling / Transform to Fit
发布时间:2020-12-15 04:18:49 所属栏目:百科 来源:网络整理
导读:我正在转发这个问题,因为我上次没有得到太多的回应,希望有一点重写可能有助于… 本质上我要做的是创建一个数据绑定的画布,它将自动缩放其内容以“填充”可用空间.像一个缩放的分类适合操作.不幸的是,我的WPF技能还不是非常强大,而我正在努力研究如何做最后一
我正在转发这个问题,因为我上次没有得到太多的回应,希望有一点重写可能有助于…
本质上我要做的是创建一个数据绑定的画布,它将自动缩放其内容以“填充”可用空间.像一个缩放的分类适合操作.不幸的是,我的WPF技能还不是非常强大,而我正在努力研究如何做最后一部分.我已经遵循一些数据绑定的例子来获得画布的界限,但不知道是否可能是错误的,阻碍了我. 我现在有两个基本的问题,这取决于我尝试和解决方案的方式: >我不知道怎么做 我想要实现的一个例子,我有一个我想尝试得到B: (删除过期链接到img) 我目前正在使用的代码很简单,只需用给定的坐标创建4个点,另一个视图模型将其包含进来. public class PointCollectionViewModel { private List<PointViewModel> viewModels; public PointCollectionViewModel() { this.viewModels = new List<PointViewModel>(); this.viewModels.Add(new PointViewModel(new Point(1,1))); this.viewModels.Add(new PointViewModel(new Point(9,9))); this.viewModels.Add(new PointViewModel(new Point(1,9))); this.viewModels.Add(new PointViewModel(new Point(9,1))); } public List<PointViewModel> Models { get { return this.viewModels; } } } public class PointViewModel { private Point point; public PointViewModel(Point point) { this.point = point; } public Double X { get { return point.X; } } public Double Y { get { return point.Y; } } } 然后,PointCollectionViewModel用作我的AutoResizingCanvas的DataContent,它具有以下XAML来实现绑定: <UserControl x:Class="WpfCanvasTransform.AutoResizingCanvas" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfCanvasTransform" x:Name="parent"> <ItemsControl x:Name="itemsControl" ItemsSource="{Binding Path=Models}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Canvas x:Name="canvas" Background="DarkSeaGreen" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <Canvas.LayoutTransform> <ScaleTransform ScaleY="-1" /> </Canvas.LayoutTransform> </Canvas> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate DataType="{x:Type local:PointViewModel}"> <Ellipse Width="3" Height="3" Fill="Red"/> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.ItemContainerStyle> <Style> <Setter Property="Canvas.Top" Value="{Binding Path=Y}"/> <Setter Property="Canvas.Left" Value="{Binding Path=X}"/> </Style> </ItemsControl.ItemContainerStyle> </ItemsControl> </UserControl> 解决方法
由于您的Canvas似乎没有固定的宽度和高度,我将其包含在一个Viewbox中:
<ItemsControl.ItemsPanel> <ItemsPanelTemplate> <Viewbox Stretch="Uniform"> <Canvas x:Name="canvas" Background="DarkSeaGreen"> <Canvas.LayoutTransform> <ScaleTransform ScaleY="-1" /> </Canvas.LayoutTransform> </Canvas> </Viewbox> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> 或者,将整个UserControl放置到ViewBox中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 正则表达式中^/$和i、m、g的使用
- c – 在#define中使用0x1是什么意思?
- ruby-on-rails – 将日期与rails3中的Datetime Created_at进
- visual-c – 为什么ATL调用子类“超类”
- React学习之最近公共组件(九)
- 需要帮助使用Ruby on Rails中的hidden_??field将jQuery UI
- [db]SQLITE3 --详解
- git pull --allow-unrelated-histories origin master
- swift:使用协议protocol设置颜色,UIImage的切圆角ImageWit
- ruby-on-rails – 生产环境错误