You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF文本框值保存到变量及控件间值传递报错(CS0103)求助

解决WPF中用户控件TextBox值访问与自定义类绑定问题

我来帮你一步步搞定这个WPF的问题,你遇到的CS0103报错和逻辑问题主要有几个关键点,咱们逐个解决:

1. 先修复自定义类的无限递归bug

你的jpData类里的属性实现会触发无限递归——因为get和set都直接引用了属性本身,得改成用私有字段存储实际值:

public class jpData 
{
    // 用私有字段存值,避免递归调用
    private double _minJpValue;
    public double minJpValue 
    { 
        get { return _minJpValue; } 
        set { _minJpValue = value; } 
    }
}

嫌麻烦的话也可以用C#自动属性,更简洁:

public class jpData 
{
    public double minJpValue { get; set; }
}

2. 让MainWindow能拿到用户控件TextBox的值

这里有两种常用方案,选哪种看你的需求:

方案一:给用户控件加公开属性暴露值

在你的用户控件后台代码(比如UserControl1.xaml.cs)里加一个属性,用来封装TextBox的输入值:

public double MinJpValue
{
    get
    {
        // 尝试把文本转成double,这里可以加异常处理避免输入非法值
        if (double.TryParse(minJpValue.Text, out double value))
        {
            return value;
        }
        // 转换失败返回默认值,你也可以根据业务逻辑调整
        return 0;
    }
    set
    {
        minJpValue.Text = value.ToString();
    }
}

然后在MainWindow的XAML里给用户控件起个名字:

<!-- 注意替换成你的用户控件实际类名,local是命名空间,确保已正确引用 -->
<local:YourUserControlName x:Name="MyJpUserControl"/>

最后在MainWindow的按钮点击事件里,通过这个属性获取值并赋值给自定义类:

private void clickclick(object sender, RoutedEventArgs e)
{
    jpData userData = new jpData();
    // 从用户控件拿值存到自定义类里
    userData.minJpValue = MyJpUserControl.MinJpValue;
    // 弹出显示
    MessageBox.Show(userData.minJpValue.ToString());
}

方案二:用数据绑定(更符合WPF设计思想)

如果想遵循WPF的MVVM思路,直接把TextBox和自定义类的属性绑定起来会更优雅:

首先在MainWindow后台代码里初始化自定义类实例,并设置为界面的DataContext:

public partial class MainWindow : Window
{
    // 声明自定义类实例作为绑定源
    public jpData JpData { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        JpData = new jpData();
        // 让界面可以绑定到这个属性
        DataContext = this;
    }

    private void clickclick(object sender, RoutedEventArgs e)
    {
        // 直接用绑定好的属性值即可
        MessageBox.Show(JpData.minJpValue.ToString());
    }
}

然后修改用户控件的TextBox,绑定到JpData.minJpValue,设置UpdateSourceTrigger=PropertyChanged可以让输入实时同步:

<TextBox x:Name="minJpValue" Text="{Binding JpData.minJpValue, UpdateSourceTrigger=PropertyChanged}"/>

3. 额外提醒

  • 如果用户输入的不是有效数字,转换会失败,建议加输入验证(比如用WPF的ValidationRule)或者异常捕获逻辑
  • 确保MainWindow的XAML里正确引用了用户控件的命名空间(一般是xmlns:local="clr-namespace:WpfApp1")

内容的提问来源于stack exchange,提问作者onethreethreeseven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:05:41