C# 字符串值传递不正确

C# 字符串值传递不正确,c#,wpf,string,header,treeviewitem,C#,Wpf,String,Header,Treeviewitem,在我的程序中,我有一个TreeViewItem,它的标题设置为一个数值整数值。为了将标题转换为直接的int值,我将传递给名为getNumber的函数 MygetNumber函数: 此函数来自 我在程序中的几个不同区域以相同的方式传递此函数,但其中一个区域的字符串传递不正确。在调试器中(parentNodeHeader)将“System.Windows.Controls.StackPanel”显示为它的值而不是数字。我不知道为什么会这样 对于函数的工作调用和非工作调用,我使用相同的代码 int c

在我的程序中,我有一个
TreeViewItem
,它的
标题
设置为一个数值
整数
值。为了将
标题
转换为直接的
int
值,我将传递给名为
getNumber
的函数

My
getNumber
函数:

此函数来自

我在程序中的几个不同区域以相同的方式传递此函数,但其中一个区域的
字符串
传递不正确。在调试器中(
parentNodeHeader
)将
“System.Windows.Controls.StackPanel”
显示为它的值而不是数字。我不知道为什么会这样

对于函数的工作调用和非工作调用,我使用相同的代码

int curNumber = getNumber(SelectedItem.Header.ToString());
为什么会发生这种情况?我如何修复它

更新:

通过添加以下内容,我更改了对
getNumber
函数的调用

var selectedHeader = (TextBlock)SelectedItem.Header; //The header is now a TextBlock
int curNumber = getNumber(selectedHeader.Text);
理论上,这应该是可行的,但我得到了一个
InvalidCastException
,它说它不能将
StackPanel
转换为
TextBlock
StackPanel
从哪里来


谢谢您的帮助。

我没有使用
getNumber()
函数,而是使用
Regex
字符串中提取
整数

要使用
Regex
,需要包含
System.Text.regular表达式


然后像这样实现它:
var data=Regex.Match(stringValue,@“\d+”).Value

你还记得我什么时候告诉过你,你不应该阅读UI元素的属性吗?如果你听从了我的建议,而不是像黑客那样的可怕的winforms,那么你现在已经完成了你的申请(两次)。我相信你刚刚完成了scolded@HighCore我认为你是一个能说出心中想法的人,我很感激。然而,对我来说,你怎么称呼我的代码并不重要。我明白你的意思,但我已经取得了比从最底层学习MVVM更大的进步。我现在知道了我的程序,我知道如何引用其中的元素,所以这就是我所关心的。@Ericafterdark plus,盲目地编写越来越多的代码,而不是应用适当的模式,导致糟糕的设计,完全膨胀,可能90%的代码可以被简单的绑定替换。您正在传入一个
StackPanel
对象,并在其上调用
ToString()
StackPanel
没有有意义的“文本”或“字符串”概念,因此使用报告其类型名称的默认行为。您需要访问并传递某种类型的
TextBox
控件(或者包含在
StackPanel
中的任何UI控件,其中包含您要解析的文本)。此外,您不应将
0
作为默认值分配给
curNumber
;它被
Int32.TryParse
方法丢弃。
var selectedHeader = (TextBlock)SelectedItem.Header; //The header is now a TextBlock
int curNumber = getNumber(selectedHeader.Text);