2017-05-24 5 views
0

私はどのように変換の適用後、コントロールの実際の幅と実際の高さを決定することができますか?ScaleTransformを適用した後、コントロールのサイズをどのように決定できますか?

例えば、私は(400幅赤い長方形、。例えば、PIC上)XAMLコードを以下はサイズに400x400のようなものを示さなければならないと思いますが、幅と高さが200

私は何だに等しいです間違っている?私は、変換を適用した後、実際の幅と制御の実際の高さを決定するにはどうすればよい

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    x:Class="VisualCad.Components.TempVisualTests.MainWindow" 
    mc:Ignorable="d" 
    x:Name="MyWin" 
    Title="MainWindow" WindowState="Maximized" Height="500" Width="500"> 

    <Grid> 
     <Rectangle Width="400" Height="5" Fill="Red" Margin="0,20,0,0" VerticalAlignment="Top"/> 

     <Canvas x:Name="MyCanvas" Width="200" Height="200"> 
      <Canvas.RenderTransform> 
       <ScaleTransform CenterX="100" CenterY="100" ScaleX="2" ScaleY="2" /> 
      </Canvas.RenderTransform> 

      <StackPanel> 
       <TextBlock Text="{Binding Path=RenderSize, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Canvas}}, StringFormat='Render size: {0}'}" /> 
       <TextBlock Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Canvas}}, StringFormat='ActualWidth: {0}'}" /> 
       <TextBlock Text="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Canvas}}, StringFormat='ActualHeight: {0}'}" /> 
      </StackPanel> 
     </Canvas> 
    </Grid> 
</Window> 

+0

ここであなたの実際の目標は何ですか?この情報が必要なのは何ですか? –

+0

正しいコントロールのための@EdPlunkettは、変換後に私のコントロールの手配をします。 – slavka

答えて

0

あなた自身で幅と高さを計算する必要があります。しかし、これはかなり簡単です:

double width = MyCanvas.ActualWidth; 
double height = MyCanvas.ActualHeight; 

ScaleTransform st = MyCanvas.RenderTransform as ScaleTransform; 
if(st != null) 
{ 
    width *= st.ScaleX; 
    height *= st.ScaleY; 
} 

このサイズを返すプロパティはありません。トランスフォーメーションはActualWidthActualHeightのプロパティには影響しません。

+0

この場合、ScaleTransformは単なる例です。変換後、実際のサイズのコントロールを取得するためのアクションが必要です。 – slavka

+0

答えは同じです。サイズを計算する必要があります。私はあなたにこれを行う方法の例を挙げたので、他に何を求めているのか分かりません。 – mm8

0

このコードは、私の作品:

var parent = element.Parent as UIElement; 

Point bottomLeft = element.TranslatePoint(new Point(0, 0), parent); 
Point topRight = element.TranslatePoint(new Point(element.ActualWidth, element.ActualHeight), parent); 

var renderWidth = topRight.X - bottomLeft.X; 
var renderHeight = topRight.Y - bottomLeft.Y; 
関連する問題