更改所有图像坐标[Windows应用商店应用,C#/ XAML]

时间:2014-03-04 11:49:24

标签: c# xaml windows-store-apps

我的项目中有很多图像和多个页面。我希望我的项目支持多屏幕分辨率。 我已经尝试过viewbox而且我无法成功,所以我尝试了一个图像

private void setResolution()
    {
        var bounds = Window.Current.Bounds;
        ratioHeight = bounds.Height / standartHeight;
        ratioWidth = bounds.Width / standartWidth;

        Canvas.SetLeft(img1, Canvas.GetLeft(img1) * (ratioWidth));
        Canvas.SetTop(img1, Canvas.GetTop(img1) * (ratioHeight));
        img1.Width = img1.ActualWidth * (ratioWidth);
        img1.Height = img1.ActualHeight * (ratioHeight);
    }

虽然有效但很长时间并且很难将其应用于约500张照片上。

有没有办法在舞台上获取所有图像并立即更改其坐标

抱歉我的英文。

2 个答案:

答案 0 :(得分:0)

公认的解决方案(Microsoft推荐)是使用网格进行放置,并使用多个图像来处理多种分辨率。他们的解决方案将提供元素的动态放置并加载正确的图像。

查看Multi-resolution apps for Windows Phone 8

的页面

(这里粘贴代码太多了。)

答案 1 :(得分:0)

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                    yield return (T)child;
                }

                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                    yield return childOfChild;
                }
            }
        }
    }

foreach (Image Images in FindVisualChildren<Image>(pageMain))
        {
            Canvas.SetLeft(Images, Canvas.GetLeft(Images) * (ratioWidth));
            Canvas.SetTop(Images, Canvas.GetTop(Images) * (ratioHeight));
            Images.Width = Images.ActualWidth * (ratioWidth);
            Images.Height = Images.ActualHeight * (ratioHeight);
        }

它对我有用(pageMain是Page的名字)