在Silverlight中使用C#而不是XAML

时间:2011-07-01 13:24:03

标签: c# silverlight xaml

XAML真的有必要吗?如果有人真的想要,可以在运行时在C#代码中声明Silverlight页面上显示的所有内容吗? VISIFire有一个示例代码,他们在C#代码中设置了一个类,图表,然后通过一个简单的C#调用将其添加到用户界面:

LayoutRoot.Children.Add(chart);

如何使用我已经在XAML文件中定义的类进行类似的创建,但由于其他原因我需要在运行时声明它?如果我可以在XAML中使用它,我认为它会起作用,因为它的显示没有错误。声明如下:

        <views:PrescriberPage01 x:Name="DashboardPrescriberPage01" 
    Visibility="Collapsed" SelectedProduct="{Binding SelectedProduct,
 Mode=TwoWay}"Grid.Row ="0"/>

我如何在C#代码中声明它?

5 个答案:

答案 0 :(得分:3)

  

XAML真的有必要吗?

我想不,你可以在代码中完成你在XAML中可以做的所有事情。但是XAML确实是一种非常便捷的方式。我认为很少有人不同意这一点。

  

我如何在C#代码中声明它?

您可以在代码中创建绑定。 Example from MSDN。在你的情况下,它会是这样的:

PrescriberPage01 page = new PrescriberPage01();
page.Visibility = Visibility.Collapsed;

Binding myBinding = new Binding("SelectedProduct");
myBinding.Mode = BindingMode.TwoWay;
myBinding.Source = this; // or whatever object carrying the property
                         // "SelectedProduct" that you bind against.

page.SetBinding(PrescriberPage01.SelectedProduct, myBinding);
LayoutRoot.Children.Add(page);

答案 1 :(得分:1)

XAML最好以声明的方式描述用户界面,我建议使用不带代码的XAML,我也建议看一下MVVM模式

答案 2 :(得分:1)

我宁愿说“当我可以使用XAML时,是否真的需要C#”? XAML非常好,并且明确地为GUI设计。

这里有两种选择。加载XAML dynamicly

或者在代码中创建它。 (其他人在我输入AGAIN时发布了解决方案!;))

答案 3 :(得分:0)

简单的控件很简单,但是......你可能还想要对这些对象进行一些样式设计+ 你可能想要一个或两个动画......这已经(大部分)都是在xaml中提供的...而且它非常简单......如果你非常讨厌xaml你可能想要考虑“Blend”; p

答案 4 :(得分:0)

没有Xaml就无法创建的一个特定示例是DataTemplate。

您可以编写将从XAML字符串创建DataTemplate的代码,但不能直接在c#中将子项添加到新建的DataTemplate中。