传递和存储字符串

时间:2016-11-03 10:08:39

标签: c# wpf string variables

我正在尝试传递一些字符串(className& classID),​​并根据用户点击的超链接将它们存储在不同的变量(classNameClicked& classIDClicked)中。

这是我创建超链接的代码(C#):

TextBlock txt = new TextBlock();                                        
txt.TextWrapping = TextWrapping.Wrap;                                   
txt.Foreground = Brushes.Black;                                         
txt.FontFamily = new FontFamily("Times New Roman");                       
txt.FontSize = 25;                                                      
txt.Margin = new Thickness(5);

TextBlock ClassID = new TextBlock();
ClassID.Visibility = Visibility.Collapsed;
ClassID.Text = classID;

Run run = new Run(className);                                           
Hyperlink link = new Hyperlink(run);                                    
link.Click += Link_Click;                                               
txt.Inlines.Add(ClassID);
txt.Inlines.Add(link);

myStackPanel.Children.Add(txt);                                         
frame.Content = myStackPanel;

我能够通过使用以下代码从超链接中提取文本,将字符串从className传递给classNameClicked:

private void Link_Click(object sender, RoutedEventArgs e)
{
     classNameClicked = ((sender as Hyperlink).Inlines.FirstInline as Run).Text;
     classIDClicked = (sender as Textblock).Text;

     Class_Page class_page = new Class_Page();
     NavigationService.Navigate(class_page);
}

但是,我似乎无法弄清楚如何从classID中提取字符串。 请帮忙。

1 个答案:

答案 0 :(得分:2)

您只需要引用Hyperlink的父级。

所以而不是

classNameClicked = ((sender as Hyperlink).Inlines.FirstInline as Run).Text;
classIDClicked = (sender as TextBlock).Text;

你可以写

Hyperlink link = sender as Hyperlink;
classNameClicked = (link.Inlines.FirstInline as Run).Text;
classIDClicked = (link.Parent as TextBlock).Inlines.OfType<Run>().First().Text;

如果你不想使用LINQ,你也可以写:

classIDClicked = ((link.Parent as TextBlock).Inlines.FirstInline as Run).Text;

但我在评论中与Mat有相同的整体意见。这真的很丑陋,MVVM将成为编写更清晰代码的方法。

此外,您应该添加一些空检查。

根据评论中的要求进行修改:
如果您不想在GUI中显示classID,那么您可以将其隐藏在Tag的{​​{1}}中:

Hyperlink

然后在你的Hyperlink link = new Hyperlink(run); link.Tag = classID; link.Click += Link_Click; 处理程序中获取它:

Click

您不需要隐藏classIDClicked = link.Tag as string;