关于wpf的scrollviewer以及图像缩放的问题

llq667 2009-07-16 09:09:17
我现在要实现的功能是通过slider调整image的大小,但要求调整过程中image的图像中心不动(就是说原来图像中心是个人头,图像放大了后,人头还在中心)。我现在的做法是通过一些坐标转换,调整image外的scrollviewer的滑块的位置,来使得中心点不动。但遇到了一个问题是,无法得到scrollviewer除去滚动条外的宽度和高度。请问这个宽度和高度如何获得?或者有没有更好的办法?
...全文
1875 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoyougang 2009-09-21
  • 打赏
  • 举报
回复
大师能否看一下你的 PositionConverter 的代码?
llq667 2009-07-17
  • 打赏
  • 举报
回复
我最近比较忙,还没来的及看,但首先谢谢你啊,应该能解决我的问题
鸣宇淳 2009-07-16
  • 打赏
  • 举报
回复
坐标转换?哎呀,那太麻烦了。用Wpf里的数据绑定就可以搞定。
思路就是,把Image的宽度和高度值绑定到slider的valus值上。拖动slider时,它的valus值一改变,图片的高度和宽度就自动跟着改变了。当然这里有一个问题就是,slider的value值范围是0~10,图片宽度和高度不能这么小,可以在绑定时用数据转换将slider的value值乘以一个数(如乘以50)再绑定到图片的高度和宽度上。以下是我刚做的一个Demo.
XAML文件代码:

<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:WpfApplic"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:PositionConverter x:Key="conver"></local:PositionConverter>
</Window.Resources>
<Grid>
<Slider Height="21" Margin="33,0,20,11" Name="slider1" VerticalAlignment="Bottom" Value="5" />



<ScrollViewer Margin="0,0,0,50" Name="scrollViewer1" VerticalAlignment="Top" >
<Image Margin="10,10,10,88" Name="image1" Source="C:\Documents and Settings\ch\桌面\100_3118副本2.jpg" Stretch="Fill" >
<Image.Width>
<Binding Path="Value" ElementName="slider1" Converter="{StaticResource conver}" ></Binding>
</Image.Width>
<Image.Height>
<Binding Path="Value" ElementName="slider1" Converter="{StaticResource conver}"></Binding>
</Image.Height>
</Image>
</ScrollViewer>
</Grid>
</Window>


用来做绑定前数据转换的类:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Globalization;

namespace WpfApplic
{
/// <summary>
/// 宽度值与slider的value的转换
/// </summary>
public class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
float va = float.Parse(value.ToString()) * 50; //宽度缩放50倍
return (va);
}
return string.Empty;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
float va = float.Parse(value.ToString()) / 50;

return (va);
}

return string.Empty;
}
}


/// <summary>
/// 高度值与slider的value的转换
/// </summary>
public class HeightConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
float va = float.Parse(value.ToString()) * 60;//高度缩放60倍
return (va);
}
return string.Empty;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
float va = float.Parse(value.ToString()) / 60;

return (va);
}

return string.Empty;
}
}
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧