我有一个弹出窗口,其中包含一个允许用户输入数字的文本框,然后单击关闭窗口的按钮。如何将用户输入的内容绑定到后面代码中的双变量?
例如,在我的弹出窗口中,我有:
<TextBox Text="{Binding ...., ElementName ....}" Margin="3" />
<Button Content="close" Click="Close_Popup" HorizontalAlignment="Center" />
我想将在该文本框中输入的内容绑定到名为“double example;”的变量中在后面的代码中。
这是正确的方法吗?或者,当我关闭窗口时变量会变回null吗?
int anInteger;
anInteger = Convert.ToInt32(textBox1.Text);
这是弹出窗口的我的xaml:
x:Name="this"
Title="Scale"
WindowStartupLocation="CenterOwner"
ResizeMode="NoResize">
<StackPanel Orientation="Vertical">
<TextBlock Text="Enter the distance between these two points in meters:" Margin="3"/>
<TextBox Text="{Binding userInput.get, ElementName=this}" x:Name="scaleText_Box" Margin="3"/>
<Button Content="Done" Click="closeScale_Window" Width="100" Margin="10"/>
</StackPanel>
这是弹出窗口背后的代码:
public partial class ScaleInputWindow : Window
{
public ScaleInputWindow()
{
InitializeComponent();
}
public double userInput { get; set; }
private void closeScale_Window(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
}
这是我的主窗口代码中的代码,userInput是一个在开头声明的双精度。
ScaleInputWindow scaleInput = new ScaleInputWindow();
if (scaleInput.ShowDialog() == true)
{
userInput = scaleInput.Input;
}
答案 0 :(得分:1)
根据您的代码anInteger
,只要您关闭窗口,它就会为0
您可以在项目的单独类中声明静态变量,并在项目中的任何位置访问它。
public class Popvalue
{
public static int anInteger = 0;
}
在弹出窗口中为其指定值。
Popvalue.anInteger = Convert.ToInt32(textBox1.Text);
答案 1 :(得分:1)
我建议使用ShowDialog方法显示弹出窗口。
在弹出窗口代码中,创建一个包含该值的属性。 (您可以将其绑定到TextBox.Text属性)
public int anInteger {get; set;}
然后当用户关闭窗口(或单击确定按钮)时,设置DialogResult属性(可用于所有窗口)
private void btnDialogOk_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
请注意,设置DialogResult会自动关闭弹出窗口。
使用您的窗口并获得结果......
MyPopupWindow popup = new MyPopupWindow ();
if(popup.ShowDialog() == true)
enteredNumber = popup.anInteger;
答案 2 :(得分:1)
您不包含获取
<TextBox Text="{Binding ElementName=this, Path=userInput}" x:Name="scaleText_Box" Margin="3"/>
你也可以设置DataContext然后没有ElementName =这个 DataContext更常见