Преобразования WPF — поворот и переключение ширины / высоты?

#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: