如何在运行时获取TextBox的宽度?

-1 c# silverlight wpf textbox width

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel>
            <TextBox Name="TextBox1" HorizontalAlignment="Left" PreviewKeyUp="TextBox_PreviewKeyUp"></TextBox>
        </StackPanel>
    </Grid>
</Window>  
Run Code Online (Sandbox Code Playgroud)
namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TextBox_PreviewKeyUp(object sender, KeyEventArgs e)
        {
            TextBox1.Text = "Some text inside Textbox";
            MessageBox.Show("TextBox1 Width = " + TextBox1.Width + " & TextBox1.ActualWidth = " + TextBox1.ActualWidth); // NaN & 10
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何动态获取宽度TextBoxWidth并且ActualWidth只给出了默认的编译时间值,但是在编译之后我需要Width属性.

Bla*_*hma 5

Width并且ActualWidth没有给你默认的编译时间值.

Width要求的大小.

ActualWidth渲染的大小.来自MSDN

ActualWidth是计算值,由于布局系统的操作,可能会对值进行多次或增量报告的更改.如果在布局仍在迭代时获得值,则布局系统可能仍在计算子对象所需的空间度量,父对象的约束等等.

在您的情况下,如果您想要项目的实际大小,请使用ActualWidth.

编辑:根据您的评论,我向您展示如何通过使用BeginInvoke使您的特定方法工作,以给ActualWidth一个计算机会:

private void TextBox1_PreviewKeyUp_1(object sender, KeyEventArgs e)
{
        TextBox1.Text = "Some other text";
        Dispatcher.BeginInvoke((Action)new Action(() =>
            MessageBox.Show("TextBox1 Width = " + TextBox1.Width + " & TextBox1.ActualWidth = " + TextBox1.ActualWidth)),
          System.Windows.Threading.DispatcherPriority.Input);
}
Run Code Online (Sandbox Code Playgroud)