2017-11-27 1 views
0

Ich mag einen Bildschirm mit 2 Panel wie folgt umzusetzen:UWP: Wie erstellt man ein Panel mit Rotation?

enter image description here

linke und rechte gedreht wird. Ihre All-Child-Ansicht wird Breite und Höhe gemessen haben.

Ich benutze eine CompositeTransform und wiederhole es in PageLoad, hat aber kein Update.

public sealed partial class TestRotate : Page 
{ 

    public TestRotate() 
    { 
     this.InitializeComponent();    
     this.Loaded += PageLoaded; 
     this.SizeChanged += PageSizeChange; 
    } 

    private void PageSizeChange(object sender, SizeChangedEventArgs e) 
    { 
     Measure(new Size()); 
    } 

    private void PageLoaded(object sender, RoutedEventArgs e) 
    { 
     CompositeTransform compositeTransform = new CompositeTransform(); 
     compositeTransform.Rotation = 90; 
     compositeTransform.CenterX = areaA.ActualWidth/2; 
     compositeTransform.CenterY = areaA.ActualHeight/2; 
     areaA.RenderTransform = compositeTransform; 

     Measure(new Size()); 
     areaA.Measure(new Size(areaA.ActualHeight, areaA.ActualWidth)); 
    } 

    private void btnStart_Click(object sender, RoutedEventArgs e) 
    { 

    } 
} 

Dies ist XAML:

<Page 
    x:Class="MyApp.TestRotate" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:MyApp" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid > 

     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="5" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <StackPanel Grid.Column="0" x:Name="areaA" Grid.Row="0" Background="GreenYellow"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="auto" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="TextBlock" Grid.Column="0"/> 
       <TextBox Text="TextBox" Grid.Column="1"/> 
      </Grid> 
      <Button Content="Button"/> 
     </StackPanel> 


    </Grid> 
</Page> 

Aber das Ergebnis stimmt nicht überein, was ich erwartet hatte. Das Panel ist nicht automatisch Größe, um die Eltern enter image description here

+0

Was ist Ihre AreaA und wie ordnen Sie Ihre Panels an, bevor Sie sie drehen? Ich benutze ColumnDefinitions um sie zu teilen und rotiere dann mit deinem Code. Mein StackPanel hat sich selbst gedreht und neu angeordnet. –

+0

@BarryWang Tut mir leid, ich werde meine Frage bearbeiten, um klarer – quangkid

+0

@quangkid zu erklären, verwenden Sie Sterngrößen für beide Spalten in Ihrem 'areaA' 'StackPanel', wenn Sie möchten, dass sie jeweils den gleichen Platz haben. – Sheridan

Antwort

0

Ich fand eine Lösung in diesem post, die in meinem Fall funktioniert. Es bringt LayoutTransform von WPF zu UWP.

Verwandte Themen