2016-04-07 43 views
1

私はその親に対するコントロールの位置を取得したい、あるいはどんな種類の位置でも、本当に重要ではありません。しかし、私はこれをコードなしでXAMLでのみ行いたいと思っています。私はグリッド5x3を持っており、ボタンは3行目と2列目にあります。ですから、基本的にグリッドの最初の2行の幅と、鳥の最初の列の幅を取得したいと思います。XAMLでコントロールの位置を取得する方法は?

私は、このような翻訳アニメーションをやりたいので、ピクセル単位でのボタンの位置を知りたい:

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

ではなく、500のハードコードされた値を使用しての、私はそれが対応して何になりたいですボタンの水平位置(ピクセル単位)へ

+0

私はMVVMを使用しており、コードを書き込まない傾向があります。私は、MVVMがコードを完全に排除することではないことを知っていますが、これまでのアプリケーションではコードを書く必要はありませんでした。 – Ivan

+0

なぜ私は、ビジュアルツリーで前のコントロールの位置を知りたいのですか? – StepUp

+0

このような変換アニメーションを行うため、ボタンの位置をピクセルで知りたい:ハードコードされた値500を使用する代わりに、ボタンの水平位置(ピクセル単位)に対応するものにします。 – Ivan

答えて

2

次のXAMLのようなものが役立ちます。これは、ボタンの左の列を塗りつぶす透明なダミーの矩形のアイデアからインスピレーションを受けています。

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

代わりに、おそらくより良いダミー長方形のActualWidthプロパティの値を反転させるために結合コンバータを使用することができます上記のようにRenderTransformを宣言する。

+0

あなたは私にそのコンバータのヒントを教えていただけますか? – Ivan

+0

'Binding.Converter'プロパティのオンラインドキュメントを見てください。あなたの実装はConvertメソッドから 'return((double)value;)を返すだけです。 – Clemens

関連する問題