#c# #xaml #uwp
#c# #xaml #uwp
Вопрос:
Я использую метод Rotate из
using Microsoft.Toolkit.Uwp.UI.Animations;
Для поворота UIElement
Но этот метод работает не так, как должен. Поворачивает элемент, но изменяет высоту и ширину. Мой код xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Click="Button_Click"
Content="Click"
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
<ScrollViewer Height="150"
Width="200"
Grid.Row="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<Image x:Name="myImage"
Source="/Images/TestImage.png" />
</ScrollViewer>
</Grid>
Метод поворота:
int Pos = 0;
private async void Button_Click(object sender, RoutedEventArgs e)
{
Pos = --Pos;
await myImage.Rotate(duration: 0, delay: 1,
centerX: (float)myImage.ActualWidth / 2,
centerY: (float)myImage.ActualHeight / 2,
value: Pos * 90).StartAsync();
}
И часть пользовательского элемента не отображается (обрезается), и из-за этого невозможно выполнить прокрутку по всему элементу.
Как вы можете повернуть элемент так, чтобы его размеры изменились?
Ответ №1:
Если вы поместите изображение в ScrollViewer
элемент управления, изображение не будет показано полностью, потому что в a достаточно внутреннего пространства ScrollViewer
. Height
И Width
свойство ScrollViewer
and уже установлено, фактический размер повернутого изображения не будет превышать свойство Height
and Width
ScrollViewer
. Следовательно, размеры изображения не изменятся при его повороте.
Если вы хотите повернуть изображение так, чтобы его размеры менялись, пожалуйста, не используйте ScrollViewer
, установите свойство Height
and Width
изображения напрямую, вот так:
<Image x:Name="myImage" Height="150" Width="200" Grid.Row="1" Source="Assets/TestImage.png" Stretch="Uniform"/>
Комментарии:
1. Дело в том, что в ScrollViewer у меня есть элемент, который пользователь может увеличивать и уменьшать, и мне нужен ScrollViewer, чтобы пользователь мог прокручивать объект
2. Размер
ScrollViewer.Content
(вот изображение) определяется послеScrollViewer
того, как элемент управления загрузит изображение. При повороте изображения часть изображения будет обрезана, поскольку ширина повернутого изображения превышает высотуScrollViewer.Content
. Вы могли бы попытаться повернуть элементScrollViewer
управления вместо поворота изображения. Или вы можете установить значенияWidth
свойства иHeight
свойства изображения одинаковыми.
Ответ №2:
Я нашел только один способ решить эту проблему, и это было вставить сетку.
<ScrollViewer Height="150"
Width="200"
x:Name="myScrollViewer"
Grid.Column="0"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<StackPanel x:Name="mainContext" Orientation="Vertical">
<Grid x:Name="BungTop" Visibility="Collapsed" Height="100" Width="100" />
<Image x:Name="myImage"
Source="/Images/TestImage.png" />
<Grid x:Name="BungBotton" Visibility="Collapsed" Height="100" Width="100"/>
</StackPanel>
</ScrollViewer>
Они могут включать или выключать видимость или изменять размер.