绑定缩放值来控制尺寸
我有一个Canvas
其上有一些图像(24x24的大小),我也有一个滚动条放大和缩小画布。绑定缩放值来控制尺寸
我想在调整画布大小时使图像保持相同大小,所以我想将图像的宽度/高度绑定到缩放值,以使它们的宽度/高度取决于缩放值(So ,例如,他们将Width = Width/ZoomValue
或类似的东西)
我怎样才能获得这种行为使用WPF和绑定?
谢谢!
假设图像都具有24的宽度,结合ZoomValue和使用的IValueConverter:
(ZoomValue必须是在你的视图模型)
<Image Source="..." Width="{Binding ZoomValue, Converter={StaticResource ZoomToWidthConverter}" />
而的IValueConverter:
public class ZoomToWidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Double imgOriginalWidth = 24;
return imgOriginalWidth/System.Convert.ToDouble(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Double imgOriginalWidth = 24;
return System.Convert.ToDouble(value) * imgOriginalWidth;
}
}
画布的资源必须包含ZoomToWidthConverter的关键字:
<Canvas>
<Canvas.Resources>
<local:ZoomToWidthConverter x:Key="ZoomToWidthConverter " />
</Canvas.Resources>
</Canvas>
如果图像可能具有不同的原始宽度,请使用MultiBinding和IMultiValueConverter。
伟大的答案和示例,非常感谢!:)圣诞快乐! – 2011-12-26 12:19:39
祝你圣诞快乐=) – 2011-12-26 12:21:40
出发点是定义你会在绑定使用转换器,这里有一些链接,可能是有用的:
- http://www.wpftutorial.net/ValueConverters.html
- http://blogs.imeta.co.uk/FMoreno/archive/2008/11/07/498.aspx
希望这有助于!
谢谢!将尝试这些!你有针对我的问题的更具体的代码示例吗?这就是我最好的学习方式 – 2011-12-26 12:14:56
我自己并没有这样做(意思是我自己没有创建一个转换器,我已经使用了内置的一个(boolToVisConverter),所以我没有任何。请看下面的狒狒回答,他已发布创建转换器的代码! – SpeedBirdNine 2011-12-26 12:19:27
感谢您的协助,thx! – 2011-12-26 12:21:43
不是很确定,如果在这个主题上已经有一些内置的完成,已经在WPF 4.0
,也导致这个功能很久以前被用户请求。您可以申请的唯一有价值的解决方案是将您的childcontrol.RenderTransform
指定为的逆,其transformation matrix
为其父项,因此canvas
。
让数据绑定分配正确的值
通过这样做,希望你重新应用到画布转型,并得到了“老”矩阵很明显。考虑到你正在谈论一个单一转型(没有Translation
,Scale
和Rotation
作出序列),你必须得到数学上可预测(如此正确)的“原始”矩阵(他们称之为Identity
)。
看this答案,它又指另一个答案。
希望这会有所帮助。
感谢您的信息! – 2011-12-26 12:19:59
我也想过在我的图像上应用一个'ScaleTransform',它将绑定到缩放值并且是'1/ZoomValue' – 2011-12-26 16:25:28