2010-06-30 4 views
1

나는 XAML의 구조는 다음과 같습니다 고객은 미리 층에 모양을 그리기됩니다캔버스에서 다른 캔버스로 사각형의 경계를 조정하는 방법은 무엇입니까?

<Grid> 
    <ItemsControl x:Name="Items" ItemsSource="{Binding Path=Pages}" Grid.Row="0" Grid.Column="0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <!-- Display a white page for each page item --> 
     <local:PageView Margin="0, 25, 0, 0" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    </ItemsControl> 

    <!-- Layer used for displaying preview of drawn shape --> 
    <local:PreviewLayer x:Name="PreviewLayer" Grid.Row="0" Grid.Column="0"/> 
</Grid> 

, 사각형을 가정하자. 드로잉이 완료되면 셰이프가 셰이프 아래의 페이지에 추가됩니다.

내 문제는 최종 사각형의 X, Y가 PreviewLayer의 좌표계에 있다는 것입니다. PreviewLayer에서 PageView로 직사각형의 경계를 변환하려면 어떻게해야합니까?

나는 현재 사용하여 필요한 페이지 뷰를 얻고합니다 (page 변수는 다른 곳에서 얻을 수있다)

UIElement pageView = (UIElement)this.Items.ItemContainerGenerator.ContainerFromItem(page); 

하지만 반환은 페이지 뷰의 좌표를 얻을하는 방법을 모르겠어요. Canvas.GetLeft(pageView)을 사용하면 NaN가 반환됩니다.

어떻게하면 pageView 경계를 얻을 수 있습니까?

답변

1

TranslateToPoint을 사용하여 알아낼 수있었습니다. 처음에는 함수가 작동하지 않습니다. ContainerFromItem은 항목의 컨테이너를 반환한다는 것을 알았습니다 (함수의 이름을 읽는 것이 논리적 이었지만 내 머리 위로 간 것 같습니다).

컨테이너의 첫 번째 하위 항목을 가져 오면 TranslateToPoint에 필요한 요소가 반환되었습니다.

관련 문제