2011-02-14 53 views
2

我是一位經驗豐富的程序員,但對Silverlight的世界卻是全新的。我一直負責解決Silverlight應用程序中的問題,並努力尋找我需要的信息。確定Silverlight控件的大小

該應用程序包含一個自定義控件,可以在鼠標光標附近顯示彈出工具提示。我需要確保工具提示的定位方式不會超出控件的界限。容易,理論上,但我不知道如何獲得控制的大小。

它在一些XAML中聲明,就像這樣(主控更名爲隱私「XXX」):

<client:XxxHost x:Class="Project.Client.Banana" 
    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" 
    xmlns:xxx="clr-namespace:Project.Controls;assembly=Project.Controls.Xxx" 
    xmlns:ui="clr-namespace:Project.Controls.UI;assembly=Project.Controls.UI" 
    xmlns:client="clr-namespace:Project.Client" 
    mc:Ignorable="d" 
d:DesignHeight="300" d:DesignWidth="400"> 
<xxx:XxxControl x:Name="XxxControl"> 
    <xxx:XxxControl.UI> 
     <ui:Banana DataContext="{Binding}" View="{Binding View}" /> 
    </xxx:XxxControl.UI> 
    <xxx:XxxControl.TooltipDisplay> 
     <xxx:MultiTooltipDisplay></xxx:MultiTooltipDisplay> 
    </xxx:XxxControl.TooltipDisplay> 
</xxx:XxxControl> 
</client:XxxHost> 

在代碼中,MultiTooltipDisplay是帆布派生的類。在它的方法來顯示一個提示,它有這個代碼:

public void DisplayTooltips(System.Collections.Generic.List<UIElement> tooltips, Point screenAnchor) 
    { 
     ClearTooltips(); 

     if (tooltips.Count > 0) 
     { 
      StackPanel ttStack = new StackPanel(); 
      ttStack.Orientation = Orientation.Vertical; 
      for (int i = 0; i < tooltips.Count; i++) 
      { 
       UIElement ttip = tooltips[ i ]; 
       UserControl ttipWrapper = new UserControl(); 
       ttipWrapper.Content = ttip; 
       ttStack.Children.Add(ttipWrapper); 
      } 
      ttStack.SetValue(Canvas.TopProperty, screenAnchor.Y); 
      ttStack.SetValue(Canvas.LeftProperty, screenAnchor.X + 24.0); 
      this.Children.Add(ttStack); 
     } 
    } 

如果我把一個斷點在對這一方法的結束,我檢查ttStack的Width/Height/ActualWidth/ActualHeight/DesiredSize,我覺得他們都是0或NaN。經過一些閱讀和試用&錯誤,我發現通過調用ttStack.UpdateLayout(),這些值將被填充。我不確定這是否正確,但數字看似合理。大!

但是,我需要知道顯示工具提示的控件的大小,但我得到同樣的問題。 this.Width/Height /等全部返回0或NaN。對this.UpdateLayout()的調用不會更改這些屬性。

如何確定控件的尺寸?

回答

1

嘗試在ttStack上調用Measure方法,然後再讀取DesiredSize

+0

那麼,設置ttStack的DesiredSize/ActualWidth/ActualHeight,但我已經得到那些,如果我叫UpdateLayout()。 問題是關於畫布(即'這個'),以及我如何找到它的大小。 – 2011-02-16 07:39:57

0

我用ActualWidthActualHeight,它爲我工作。