2017-05-24 16 views
0

변환을 적용한 후 컨트롤의 실제 너비와 실제 높이를 어떻게 결정할 수 있습니까?ScaleTransform을 적용한 후 컨트롤 크기를 어떻게 결정할 수 있습니까?

예를 들어, 내가 (.은 PIC에 예를 들어, 400 폭 빨간색 사각형) XAML 코드를 다음은 400x400 크기와 같은 크기의 뭔가를 보여해야한다고 생각하지만, 폭과 높이가 어떻게 생각 (200)

동일 잘못하고있는거야?

I의 변형을 적용한 후 실제 폭 제어의 실제 높이를 결정할 수있는 방법
<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;