首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

silverlight NaN的高度和宽度,ActualHeight和ActualWidth也返回0.0 - 解决方法是什么?

问题描述:在使用Silverlight开发中,当设置了元素的高度和宽度为NaN时,同时获取元素的ActualHeight和ActualWidth属性时,返回的值都为0.0。请问如何解决这个问题?

解决方法:

  1. 确保元素已经被正确加载:在获取元素的ActualHeight和ActualWidth属性之前,确保元素已经被正确加载到页面上。可以通过在元素的Loaded事件中获取属性值,或者在页面的Loaded事件中获取属性值。
  2. 使用Measure和Arrange方法:在获取元素的ActualHeight和ActualWidth属性之前,可以手动调用元素的Measure和Arrange方法来强制进行布局和测量。示例代码如下:
代码语言:csharp
复制
element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
element.Arrange(new Rect(0, 0, element.DesiredSize.Width, element.DesiredSize.Height));
  1. 使用Dispatcher.BeginInvoke延迟获取属性值:有时候元素的布局可能还没有完成,此时获取ActualHeight和ActualWidth属性可能会返回0.0。可以使用Dispatcher.BeginInvoke方法将获取属性值的操作延迟到布局完成后执行。示例代码如下:
代码语言:csharp
复制
Dispatcher.BeginInvoke(() =>
{
    double height = element.ActualHeight;
    double width = element.ActualWidth;
});
  1. 使用SizeChanged事件:可以订阅元素的SizeChanged事件,在事件处理程序中获取元素的ActualHeight和ActualWidth属性。示例代码如下:
代码语言:csharp
复制
element.SizeChanged += (sender, e) =>
{
    double height = element.ActualHeight;
    double width = element.ActualWidth;
};

推荐的腾讯云相关产品和产品介绍链接地址:

暂无相关产品和链接推荐。

以上是针对Silverlight中元素高度和宽度为NaN时获取ActualHeight和ActualWidth属性返回0.0的解决方法。请根据具体情况选择适合的方法进行处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Extensions in UWP Community Toolkit - FrameworkElement Extensions

ActualWidth 和 ActualHeight。 ...; 默认值 double.NaN; ActualWidthProperty - double,实际尺寸的宽度;默认值 double.NaN; 而这三个依赖属性分别对应的 get 和 set 方法分别是:...; 而通过扩展设置的绑定,和直接设置 ActualHeight 和 ActualWidth 的绑定的区别就是,直接设置的方式,对于 Width 和 Height 未指定的情况绑定无效,且不会更新,而扩展的方式可以获取初始尺寸且可以实时更新...} 代码简单分析如上,大家在实际项目中可以对这个类进行扩展,比如把 Opacity,Color 等也作为可以实时绑定的值,实现方式和 ActualHeight ActualWidth 很类似,大家可以自行扩展...调用示例 我们创建了三个 Rectangle,第一个是绑定目标,第二和第三个去绑定第一个的实际尺寸;可以看到因为第二个红色矩形使用 ActualHeight 和 ActualWidth 直接进行绑定,所以并没有绑定到正确的值

79080
  • How-to: 创建Windows Phone 7自定义控件

    本人以前做Windows Mobile平台比较多,WP7平台上Silverlight是两个主流技术之一,因此也是现学现用,文章中有不对的地方还请大家指正。...当然,不管难以与否,写这篇文章的目的就是为了和大家分享Windows Phone 7 控件的制作心得,下面切入正题。...有关Windows Phone 7的控件     提到Windows Phone 7的控件,大家最熟悉的应该就是Silverlight for Windows Phone 7,它为我们提供了丰富的控件...导入元素,生成控件     在Expression Blend下面,我们可以自己画控件的UI,也可以直接利用现有的成果,比如说是Photoshop的文件或者是Illustrator文件,通过Expression...UpdatePosition方法根据气泡的浮力和水流方向,更新界面。IsOutOfBounds用来判断气泡是否已经超越了屏幕。

    84770

    了解WPF的布局过程,并利用Measure为Expander添加动画

    我不建议初学者做太多动画的工作,但合适的动画可以引导用户视线,提升用户体验。例如上图的这种动画,这种动画挺常见的,在内容的高度改变时动态地改变自身的高度,除了好看以外,对用户体验也很有改善。...其实老老实实从Silverlight Toolkit移植AccordionItem就好,但我想通过这个控件介绍一些布局(及动画)的概念。...改变时调用InvalidateMeasure()请求重新布局,MeasureOverride返回ContentHeight和ContentWidth的值。...结语 Resizer控件我平时也不会单独使用,而是放在其它控件里面,例如Button: ? 由于这个控件性能也不高,以后还可能改进API,于是被放到了Primitives命名空间。...但是一朝被蛇咬十年怕草绳,所以我很少去碰Measure和Arrange的代码,我也建议使用Measure和Arrange要慎重。 5.

    1.5K30

    《101 Windows Phone 7 Apps》读书笔记-BOOK READER

    应用程序栏区域同时也显示了当前页码和总页码(这是基于当前字体设置情况的)。 ? 图 25.1 主页面图,默认使用类似Amazon Kindle的颜色模式,专门为阅读提供足够的对比度。...The PaginatedDocument User Control     为了决定分页产生的位置,PaginatedDocument用户控件必须测量当前字体设置下,每个字符的宽度和高度。...执行测量的唯一方式是将文本放置于text block中,并且检查其ActualWidth和ActualHeight属性的值。因此,PaginatedDocument将执行以下三个步骤的算法: 1....查找文档中每个不同的字符(《傲慢与偏见》只包含了85个不同的字符)。 2. 通过向text block中放置每个字符来测量其宽度和高度,一次放置一个。...所有字符的高度都是一样的(因为这里的高度是线高度,包含了填充和其它),因此,高度只需要测量一次。 3. 从头至尾浏览整篇文档,使用预先测量好的字符宽度来计算每个换行的地点。

    1.2K60

    WPF 动画性能测试应用 一千个半透明矩形做动画

    比如修改布局层的属性,如元素的宽度高度等,导致布局系统重新布局,耗时在布局上,或者是布局触发的事件被业务监听,额外执行了业务逻辑。...本次的测试应用将尽可能减少这部分的干扰,使用比较基础的方式编写 在 MainWindow 的 Loaded 事件里编写实现逻辑,如此可以规避 Win32 窗口创建时的故事,也方便大家进行性能测量...(ActualWidth - size.Width)), Random.Shared.Next((int) (ActualHeight - size.Height...Random.Shared.Next((int) (ActualHeight - size.Height))); 使用随机数生成矩形的起点和终点,不要超过画布的大小,如此将不会导致画布缩放...((int) (ActualWidth - size.Width)), Random.Shared.Next((int) (ActualHeight - size.Height

    59240

    使用GetAlphaMask制作阴影

    其实GetAlphaMask的使用场景十分有限,Github上能搜到的内容都是用来配合DropShadow的,所以这篇文章也以介绍DropShadow为主。 2. 合成阴影 先介绍一下合成阴影。...= null) { newSize = new Vector2((float)Host.ActualWidth, (float)Host.ActualHeight);...centerPoint = new Vector3((float)Host.ActualWidth / 2, (float)Host.ActualHeight / 2, 0); } _backgroundVisual.CenterPoint...使用GetAlphaMask裁剪阴影 上面的代码需要可以实现阴影,但只能实现矩形的阴影,在WPF和Silverlight中常用的Shape的阴影,或者文字的阴影都做不出来。...Image、 TextBlock和Shape分别实现一个名为GetAlphaMask的方法, 该方法返回一个CompositionBrush , 该方法表示具有元素形状的灰度图像。

    82930

    win10 uwp 气泡 WPF 气泡

    可以看到,尖头大小可以固定,但是矩形必须使用子控件的大小 于是先假如子元素的宽度是100,高度 50 ,这样来画一个气泡。 如何画一个三角?...假设尖头宽度 10 高度 5 ,那么可以看到第一个点是 (0,5) 第二个点是 (5,0) 第三个点是 (10,5) ?...需要知道, WPF 使用的布局不是和以前课本说的一样 但是除了尖头,还需要添加矩形的距离 ? 添加的距离是矩形宽度的一半减去5,看到这里一般不会觉得有困难。...于是添加到实际的值,这里矩形宽度为 100 于是最后的值就是 (45,5) ,第二个点是 (50,0) 第三个点是 (55,5) 接下来就是计算矩形的值,矩形的值就是 x=0 y=5 ,宽度 100 高度...ActualHeight - HeadHeight) , 0, 0) 可以看到 坐标没有变化,有变化的是高度,宽度,可以通过获得自己的大小设置,因为在计算大小已经从子元素加上自己的需要大小

    1.5K10

    用Shape做动画

    相对于WPF/Silverlight,UWP的动画系统可以说有大幅提高,不过本文无意深入讨论这些动画API,本文将介绍使用Shape做一些进度、等待方面的动画,除此之外也会介绍一些相关技巧。 1....Shape的边长要正好能被StrokeDashArray中短线和缺口的和整除,即 满足边长 / StrokeThickness % Sum( StrokeDashArray ) = 0,这是因为在StrokeDashOffset...属性,所以用这个类充当Storyboard和StrokeDashArray的桥梁。...上图三角形的填充的效果只需要叠加两个同样大小的Shape,前面那个设置Stretch="Uniform",再通过DoubleAnimation改变它的高度就可以了。...文字也是相同的原理,叠加两个相同的TextBlock,将前面那个放在一个无边框的ScrollViewer里再去改变ScrollViewer的高度。

    2K30

    New UWP Community Toolkit - DeveloperTools

    ,默认为 20.0 VerticalStep - 网格纵向的步长,默认为 20.0,横向和纵向步长可以不相等 以上三个属性变化时,会触发 OnPropertyChanged(d, e),和 AlignmentGrid_SizeChanged...,则初始化为 ApplicationForegroundThemeBrush; 横向循环绘制矩形,循环步长是横向步长,总长度是控件实际宽度;绘制矩形宽度为 1,高度为控件实际高度,位置居左为当前总步长;...纵向循环绘制矩形,循环步长是纵向步长,总长度是控件实际高度;绘制矩形高度为 1,宽度为控件实际宽度,位置居上为当前总步长; private void Rebuild() { containerCanvas.Children.Clear...总结 到这里我们就把 UWP Community Toolkit 中的 DeveloperTools 的实现过程和简单的调用示例讲解完成了,希望这些工具对大家开发 UWP 应用有所帮助,如果大家有更好用的工具类...,也欢迎大家给 UWPCommunityToolkit 做 PR,贡献自己的代码,欢迎大家多多交流,谢谢!

    88070

    准确判断一个 WPF 控件 UI 元素当前是否显示在屏幕内

    本文将说三种不同的判定方法,分偷懒版、日常版和苛刻版: 如果你只是写个 demo 啥的,用偷懒版就够了,代码少性能高。 如果你在项目/产品中使用,使用日常版就好。... /// 如果元素在屏幕外面,则返回 true;如果元素在屏幕里或者部分在屏幕里面,则返回 false。...pixelBoundsToScreen.Union(visual.PointToScreen(new Point(visual.ActualWidth, visual.ActualHeight)));...更复杂的,是多台显示器还不同 DPI 时,等效屏幕尺寸的计算更加复杂。更恐怖的是,WPF 程序声明支持的 DPI 级别不同,计算也会有一些差别。想要写一种支持所有支持级别的代码更加复杂。...pixelBoundsToScreen.Union(visual.PointToScreen(new Point(visual.ActualWidth, visual.ActualHeight)));

    74240

    WPF 使用 Direct2D1 画图入门

    我在博客园看到很少的博客讲到这个。即使有也很少会说如何使用 WPF 的。 那么 D2D 是一个提高性能的方法,具体是怎么做?...现在的 WPF 底层使用的渲染是 Dx9 渲染 或使用 Dx11 Dx12 优化 fl9 渲染,所以性能实际上和直接使用 D2D 是差不多,但是 WPF 没有充分使用DX,所以如果自己写的性能会比较高...如果对于平台目标感觉有兴趣,请看WPF 编译为 AnyCPU 和 x86 有什么区别 创建工厂 首先打开 MainPage 的代码,添加下面代码 using D2D = Microsoft.WindowsAPICodePack.DirectX.Direct2D1...在 CompositionTarget 拿到渲染就是一个耗性能的过程,但是为了让 DX 渲染和 WPF 时间一样,所以需要在这个事件进行渲染。...CompositionTarget.Rendering += OnRendering; 想要画出一条线,需要知道线的两个点,和线的颜色,宽度。

    61810

    《101 Windows Phone 7 Apps》读书笔记-Silly Eye

    但是,通过缺省的From值设定,随后的点击也会使动画从当前值开始,使得动画更加的平滑和自然。 在目标属性值无法插值的情况下,我们必须指定From 和 To 的值!...假如我们尝试着为一个auto-sized元素的宽度或者高度做动画效果,而它的From和To没有指定,那么,动画效果就不会出现。...当元素的宽度或者高度被设置为Double.NaN(非数值)时,它的大小是自适应的。因为当两个值中存在一个非数值的数时,DoubleAnimation也就无法完成插值的操作。...而且,将动画应用到ActualWidth或者ActualHeight中去(它们被设置为真实的宽度或高度值,而非NaN),这并不是一个好的选择。因为这些属性是只读的,而且并不是依赖项属性。...相反,为了有动画效果,我们必须显式地设置目标元素的宽度/高度。     对于Pupil Storyboard来说,我们必须调用Storyboard的Begin方法来使得它开始工作。

    95870

    WPF 使用 Direct2D1 画图入门

    我在博客园看到很少的博客讲到这个。即使有也很少会说如何使用 WPF 的。 那么 D2D 是一个提高性能的方法,具体是怎么做?...现在的 WPF 底层使用的渲染是 Dx9 渲染 或使用 Dx11 Dx12 优化 fl9 渲染,所以性能实际上和直接使用 D2D 是差不多,但是 WPF 没有充分使用DX,所以如果自己写的性能会比较高...如果对于平台目标感觉有兴趣,请看WPF 编译为 AnyCPU 和 x86 有什么区别 创建工厂 首先打开 MainPage 的代码,添加下面代码 using D2D = Microsoft.WindowsAPICodePack.DirectX.Direct2D1...在 CompositionTarget 拿到渲染就是一个耗性能的过程,但是为了让 DX 渲染和 WPF 时间一样,所以需要在这个事件进行渲染。...CompositionTarget.Rendering += OnRendering; 想要画出一条线,需要知道线的两个点,和线的颜色,宽度。

    88910
    领券