#wpf #custom-controls #rotatetransform #rendertransform
#wpf #пользовательские элементы управления #rotatetransform #rendertransform
Вопрос:
В принципе, у меня есть FooControl
(я не устанавливал высоту / ширину явно), добавленный в Grid
.
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<FooControl x:Name="HWFoo" Content="HelloWorld" Grid.Row="0">
<FooControl.RenderTransform>
<TransformGroup>
<RotateTransform Angle="270" />
<TranslateTransform Y="{Binding ActualWidth, ElementName=HWFoo}" />
</TransformGroup>
</FooControl.RenderTransform>
</FooControl>
</Grid>
Но проблема сейчас в том, что FooControl заполняет всю строку, и когда он преобразуется, это выглядит довольно странно (из-за его высоты / ширины).
FooControl — это пользовательский элемент управления. Итак, мне что-то делать с ArrangeOverride или MeasureOverride? Или я делаю что-то неправильно, что можно исправить в XAML.
Ответ №1:
1 — Используйте LayoutTransform
2 — Установите HorizontalAlignment
влево или вправо, чтобы предотвратить растяжение
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<FooControl x:Name="HWFoo" Content="HelloWorld" Grid.Row="0" HorizontalAlignment="Left">
<FooControl.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="270" />
<TranslateTransform Y="{Binding ActualWidth, ElementName=HWFoo}" />
</TransformGroup>
</FooControl.LayoutTransform>
</FooControl>
</Grid>
Ответ №2:
Я не уверен, что вы подразумеваете под «странным», но я бы посоветовал попробовать использовать LayoutTransform вместо RenderTransform — вероятно, в этом проблема.
Однако следует отметить, что LayoutTransform выполняется значительно медленнее, чем RenderTransform.
Ответ №3:
Используйте LayoutTransform вместо RenderTransform.
http://patconroy.wordpress.com/2009/03/24/layouttransform-vs-rendertransform-in-wpf/
Просто 🙂