我是一位經驗豐富的程序員,但對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()的調用不會更改這些屬性。
如何確定控件的尺寸?
那麼,設置ttStack的DesiredSize/ActualWidth/ActualHeight,但我已經得到那些,如果我叫UpdateLayout()。 問題是關於畫布(即'這個'),以及我如何找到它的大小。 – 2011-02-16 07:39:57