大佬教程收集整理的这篇文章主要介绍了c# – 动态创建xaml对象时接收未声明的前缀,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public MainPage() { InitializeComponent(); Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender,RoutedEventArgs E) { var element = CreateEllipse(); LayoutRoot.Children.Add(element); } public Ellipse CreateEllipse() { StringBuilder xaml = new StringBuilder(); String ns = "http://scheR_532_11845@as.microsoft.com/winfx/2006/xaml/presentation"; xaml.Append("<Ellipse "); xaml.Append(String.Format("xmlns='{0}'",ns)); xaml.Append(" x:Name='myellipse'"); //causes the exception xaml.Append(" Margin='50 10 50 10'"); xaml.Append(" Grid.Row='0'"); xaml.Append(" Fill='#FD2424FF'"); xaml.Append(" stroke='Black' >"); xaml.Append("<Ellipse.Effect>"); xaml.Append("<DropShadowEffect/>"); xaml.Append(" </Ellipse.Effect>"); xaml.Append(" </Ellipse>"); var ellipse = (EllipsE)XamlReader.Load(xaml.ToString()); return ellipse; }
我想要做的是创建对象后我希望能够使用VisualTreeHelper找到父对象.
public void button1_Click(object sender,RoutedEventArgs E) { DependencyObject o = myellipse; while ((o = VisualTreeHelper.GetParent(o)) != null) { textBox1.Text = (o.GetType().ToString()); } }
有人能指出我在这样的场景中引用动态创建的对象的正确方向,或者如何以编程方式正确定义x:对象的名称?
谢谢,
您不能使用动态生成的类型直接引用“myellipse”.编译器在编译时将x:Name转换为类型 – 因为您在运行时加载它,它将不存在.
相反,您可以创建一个“myellipse”变量,并让您的动态生成例程设置它:
void MainPage_Loaded(object sender,RoutedEventArgs E) { var element = CreateEllipse(); LayoutRoot.Children.Add(element); } private Ellipse myEllipse; public Ellipse CreateEllipse() { StringBuilder xaml = new StringBuilder(); String ns = "http://scheR_532_11845@as.microsoft.com/winfx/2006/xaml/presentation"; xaml.Append("<Ellipse "); xaml.Append(String.Format("xmlns='{0}'",ns)); xaml.Append(" Margin='50 10 50 10'"); xaml.Append(" Grid.Row='0'"); xaml.Append(" Fill='#FD2424FF'"); xaml.Append(" stroke='Black' >"); xaml.Append("<Ellipse.Effect>"); xaml.Append("<DropShadowEffect/>"); xaml.Append(" </Ellipse.Effect>"); xaml.Append(" </Ellipse>"); this.myEllipse = (EllipsE)XamlReader.Load(xaml.ToString()); return this.myEllipse; }
话虽这么说,我建议不要使用这样的字符串构建椭圆.您可以直接创建椭圆类,然后添加效果.在这种情况下,您不需要使用XamlReader来解析字符串.
private Ellipse myEllipse; public Ellipse CreateEllipse() { this.myEllipse = new Ellipse(); this.myEllipse.Effect = new DropShadowEffect(); Grid.SetRow(this.myEllipse,0); // Set properties as needed return this.myEllipse; }
以上是大佬教程为你收集整理的c# – 动态创建xaml对象时接收未声明的前缀全部内容,希望文章能够帮你解决c# – 动态创建xaml对象时接收未声明的前缀所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。