Я пытаюсь понять, почему 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);
}
}
child1
может быть принудительно (принужден) к размеру его родителя перед применением преобразования. Чтобы проверить это, вы можете попробовать установить размерchild1
на значение меньше480x768
. Если это правда, ScaleTransform будет работать ожидаемо, и тогда ваша проблема изменится. - person King King   schedule 18.09.2014