簡體   English   中英

獲取畫布尺寸WPF

[英]Obtaining Canvas dimensions wpf

我有以下代碼:

Xaml

<GroupBox x:Name="FrameStatusGroupBox" Header="Frame Status" Foreground="DarkRed" Grid.Row="3">
     <ItemsControl x:Name="FrameStatusItemsControl" ItemsSource="{Binding KeepFramesSection.FrameStatus, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <ItemsControl.ItemsPanel>
                 <ItemsPanelTemplate>
                     <Canvas x:Name="FrameStatusCanvas" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="LightGray" Height="Auto" Width="Auto" IsEnabled="{Binding MarkingFileLoaded, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                  </ItemsPanelTemplate>
             </ItemsControl.ItemsPanel>
     </ItemsControl>
</GroupBox>

視圖模型

foreach (var currentCanvas in ListOfCanvases)
{
     var widthRatio = FrameStatus.ActualWidth / currentCanvas.ActualWidth;
     var heightRatio = FrameStatus.ActualHeight / currentCanvas.ActualHeight;

     foreach (var currentBoundingBox in currentCanvas.Children)
     {
           var savedObj = XamlWriter.Save(currentBoundingBox);
           var reader = new StringReader(savedObj);
           var xmlReader = XmlReader.Create(reader);
           var newChild = (UIElement) XamlReader.Load(xmlReader);

           var p = ((UIElement) currentBoundingBox).TransformToAncestor(currentCanvas)
                          .Transform(new Point(0, 0));

           p.X *= widthRatio;
           p.Y *= heightRatio;

           Canvas.SetLeft(newChild, p.X);
           Canvas.SetTop(newChild, p.Y);

           FrameStatus.Children.Add(newChild);
     }
}

FrameStatus.UpdateLayout();

我試圖獲取原始Canvas和新Canvas的尺寸,因為我想將子代之間相互復制,並且它們的大小不同。

出於某種原因,執行此操作時,此代碼: FrameStatus.ActualWidth和此代碼: FrameStatus.ActualHeight返回0。

我究竟做錯了什么?

您是否等到視圖完全加載? 如果您嘗試盡早訪問這些屬性,則它們可能尚未初始化。

另一個答案( 為什么在這種情況下為ActualWidth和ActualHeight 0.0? )建議調用

window.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
window.Arrange(new Rect(0, 0, window.DesiredWidth, window.DesiredHeight));

測量並安排哪些因素會迫使您重新計算視圖中對象的尺寸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM