2016-04-07 14 views
1

Ich möchte die Position eines Steuerelements relativ zu seinem Elternteil, oder nur irgendeine Art von Position, spielt keine Rolle. Aber ich möchte dies nur in XAML ohne Code tun. Ich habe ein Gitter 5x3, und der Knopf befindet sich in der 3. Reihe und 2. Spalte. Also, im Grunde möchte ich die Breite der ersten beiden Reihen des Gitters und die Breite der ersten Spalte des Gitters erhalten.Wie bekomme ich die Position eines Steuerelements in XAML?

Ich mag die Position der Taste in Pixel wissen, weil ich Übersetzung Animation wie dies tun will:

<DoubleAnimation Storyboard.TargetName="Studio" Storyboard.TargetProperty="RenderTransform.(TranslateTransform.X)" From="500" To="0" Duration="0:0:2"> 

sondern fest codierten Wert von 500 zu verwenden, ich mag es irgendetwas, das entspricht sein zur horizontalen Position der Taste in Pixeln

+0

Ich benutze MVVM und tendiere dazu, keinen Code hinter zu schreiben. Ich weiß, dass es bei MVVM nicht darum geht, den Code komplett zu beseitigen, aber bisher musste ich in meiner Anwendung keinen Code hinterher schreiben, und ich würde es gerne so behalten. – Ivan

+0

Ich meine, warum möchten Sie die Position des vorherigen Control in Visual Tree wissen? – StepUp

+0

Ich möchte die Position der Schaltfläche in Pixel wissen, weil ich eine Übersetzungs-Animation wie folgt machen möchte: aber anstatt den festcodierten Wert von 500 zu verwenden, möchte ich, dass es alles ist, was der horizontalen Position der Schaltfläche in Pixeln entspricht. – Ivan

Antwort

2

Etwas wie das XAML unten könnte für Sie arbeiten. Es ist inspiriert von Ihrer Idee eines transparenten Dummy Rectangle, das die Spalten links vom Button füllt.

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 

    <Rectangle x:Name="dummy" Grid.ColumnSpan="2"/> 

    <Button Grid.Column="2" VerticalAlignment="Center" Content="Click"> 
     <Button.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform ScaleX="-1"/> 
       <TranslateTransform/> 
       <ScaleTransform ScaleX="-1"/> 
      </TransformGroup> 
     </Button.RenderTransform> 
     <Button.Triggers> 
      <EventTrigger RoutedEvent="Button.Click"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
          Storyboard.TargetProperty="RenderTransform.Children[1].X" 
          To="{Binding ActualWidth, ElementName=dummy}" 
          Duration="0:0:2"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Button.Triggers> 
    </Button> 
</Grid> 

Statt die Render zu erklären, wie oben gezeigt, Sie vielleicht besser einen verbindlichen Wandler verwenden, um den Wert des Dummy-Rechtecks ​​ActualWidth Eigenschaft zu invertieren.

+0

können Sie mir bitte einen Hinweis für diesen Konverter geben? – Ivan

+0

Werfen Sie einen Blick auf die Online-Dokumentation der Eigenschaft 'Binding.Converter'. Ihre Implementierung würde einfach 'zurückgeben- (double) value;' von ihrer Convert-Methode. – Clemens

Verwandte Themen