在Silverlight中使用C#替代XAML

3

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

LayoutRoot.Children.Add(chart);

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

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

我该如何在C#代码中声明这个呢?


XAML是首选的用户界面描述方式,以声明式方式实现。 - Sergey K
XAML不仅适用于开发人员,也适用于设计师。你认为设计师如何从代码中更改控件的样式?为什么他/她必须学习C#或VB.Net?如果您需要查看控件并且仅使用C#代码,则只能通过运行应用程序来查看控件。还有一件事。尝试从代码和XAML中使用绑定。您必须看到需要编写多少代码。 - Samvel Siradeghyan
5个回答

3

XAML真的必要吗?

我认为不是,你可能可以在代码中完成XAML中的所有操作。但是,XAML确实是一种更加方便的方式。我想很少有人会反对这个观点。

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

你可以在代码中创建绑定。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

XAML是首选的用户界面描述方式,以声明式的方式进行。我建议使用XAML而不是代码后台,并且我建议看一下MVVM模式。


1
我更倾向于说“当我可以使用XAML时,C#是否真的必要用于GUI?” XAML非常好,并且专门为GUI设计。
你有两个选择。动态加载XAML
或者在代码中创建它。(其他人已经在我打字的时候发布了解决方案!;))

“当我可以使用XAML时,C#对GUI是否真的必要?” - Avada Kedavra

0

简单控件很容易, 但是您可能也希望对这些对象进行一些样式处理 + 您可能想要一两个动画... 这已经(大部分)在xaml中提供了... 而且很容易... 如果您非常讨厌xaml,您可以考虑使用"Blend";p


0

没有 Xaml,你无法创建 DataTemplate 这样的特定内容。

你可以编写代码从 XAML 字符串创建 DataTemplate,但是你无法直接在 C# 中为新创建的 DataTemplate 添加子元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接