ScaleTransform в WPF отображает неправильный размер

Я пытаюсь понять, почему ScaleTransform (тестирование в Windows Phone 8.0) выполняет рендеринг с использованием родительских размеров элемента управления, а не самого элемента управления. Я установил демонстрационное приложение, которое демонстрирует это поведение, как показано ниже.

У размеров и иерархии есть причина быть, поэтому я вручную установил Width и Height, так как это очень близко к реальному приложению.

Я ожидал, что child1 (желтый), который равен 768x1228 и имеет масштаб 0.625, будет отображать себя так, как если бы он был 480x768, но происходит то, что он отображается так, как будто он был 300x480 (например, он отображается в 0.625% из 480 вместо 768).

Какие-нибудь подсказки?

public partial class MainPage : PhoneApplicationPage
{
    private Grid root;

    public MainPage()
    {
        InitializeComponent();
        root = new Grid() {
            Width = 480,
            Height = 768,
            HorizontalAlignment = HorizontalAlignment.Left,
            VerticalAlignment = VerticalAlignment.Top,
            Background = new SolidColorBrush(Colors.Blue)
        };
        Content = root;
        Loaded += MainPage_Loaded;
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        var parent1 = new Grid {
            Background = new SolidColorBrush(Colors.Red),
            HorizontalAlignment = HorizontalAlignment.Left,
            VerticalAlignment = VerticalAlignment.Top,
            Width = 480,
            Height = 768
        };

        root.Children.Add(parent1);

        var child1 = new Grid {
            Background = new SolidColorBrush(Colors.Yellow),
            Width = 768,
            HorizontalAlignment = HorizontalAlignment.Left,
            VerticalAlignment = VerticalAlignment.Top,
            Height = 1228,
            RenderTransform = new ScaleTransform() {
                CenterX = 0,
                CenterY = 0,
                ScaleX = 0.625,
                ScaleY = 0.625
            }
        };

        parent1.Children.Add(child1);
    }
}    

person Rafael Steil    schedule 18.09.2014    source источник
comment
Я не знаком с программированием Windows Phone, но я предполагаю, что размер child1 может быть принудительно (принужден) к размеру его родителя перед применением преобразования. Чтобы проверить это, вы можете попробовать установить размер child1 на значение меньше 480x768. Если это правда, ScaleTransform будет работать ожидаемо, и тогда ваша проблема изменится.   -  person King King    schedule 18.09.2014


Ответы (1)


Что ж, похоже, это все из-за того, что компонент Grid обрезает свои дочерние элементы, как упоминалось на http://wpf.2000things.com/tag/clipping. После того, как я изменил код, чтобы Canvas сел на мель свой Grid, приложение работало, как ожидалось.

Однако я все еще нахожу это «решение» странным.

person Rafael Steil    schedule 18.09.2014