-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)
如何动态获取宽度TextBox?Width并且ActualWidth只给出了默认的编译时间值,但是在编译之后我需要Width属性.
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)