<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>
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
}
}
}
如何动态获取TextBox
的宽度? Width
和ActualWidth
只给出了默认的编译时间值,但是在编译之后我需要Width属性。
答案 0 :(得分:5)
Width
和ActualWidth
not 为您提供默认的编译时间值。
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);
}
答案 1 :(得分:-3)
使用JavaScript,因为它是在客户端获得正确大小的Textarea的唯一方法,因为他们可以使用任何浏览器?如果你有jQuery非常容易,也可以使用原生javascript。
然后让JavaScript在隐藏输入中发布该值,并获取基于服务器的代码中的输入值,以便在需要时使用。