Silverlight / WPF:一旦在屏幕上呈现UIElement,就检索它的大小

时间:2010-05-26 21:28:56

标签: wpf silverlight size element

我有以下简单的代码:

            var canvas = new Canvas();

            foreach (var ztring in strings)
            {
                var textblock = new TextBlock();
                textblock.Text = ztring;

                panel.Children.Add(textblock);

                textblock.Measure(infiniteSize);
            }

此时我希望任何大小属性(高度/宽度,ActualHeight / ActualWidth,DesiredSize,RenderSize)给我文本块的大小。他们都没有。

无论字体大小如何,

ActualHeight始终会提供16.0ActualWidth根据文本长度而不是字体大小进行更改。

我更改了父容器上的字体大小,而不是TextBlock本身。

我觉得我错过了一些理解从代码隐藏中操纵silverlight元素的基本元素。

问题是:如何获得TextBlock实际像素大小

2 个答案:

答案 0 :(得分:2)

下面的示例使用后面的代码向TextBlock添加Canvas,一旦呈现TextBlock,它会在窗口标题中显示其高度。那是你在找什么?

XAML:

<Window x:Class="HeightTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <StackPanel TextBlock.FontSize="30">
        <Canvas Name="_canvas" Height="200"/>
    </StackPanel>
</Window>

代码背后:

using System.Windows;
using System.Windows.Controls;

namespace HeightTest
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            TextBlock textBlock = new TextBlock();
            textBlock.Text = "Hello";
            Canvas.SetLeft(textBlock, 25);
            textBlock.Loaded += 
                (sender, e) => 
                {
                    Title = textBlock.ActualHeight.ToString();
                };
            _canvas.Children.Add(textBlock);
        }
    }
}

答案 1 :(得分:0)

您是否尝试使用像Grid而不是Canvas这样的真实容器? 如果您尝试使用ActualSize

在“度量”后阅读Dispatcher.BeginInvoke属性,该怎么办?