大多数事情都可以在可以在XAML中完成的代码中完成吗?

时间:2012-08-03 16:02:31

标签: c# wpf xaml

例如,我想做一些类似于你在下面看到的内容,但是在代码背后。我看到很多使用XAML的例子,但没有在C#中做同样的事情。所以我的猜测是否定的。感谢。

enter image description here

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <TextBlock TextWrapping="Wrap" Width="455">
        <Span FontSize="20">2</Span>
        <Span BaselineAlignment="TextTop" FontSize="14">1/2</Span>

        <Span FontSize="20"> + </Span>

        <Span FontSize="20">3</Span>
        <Span BaselineAlignment="TextTop" FontSize="14">3/4</Span>

        <Span FontSize="20"> = </Span>

        <Span FontSize="20">6</Span>
        <Span BaselineAlignment="TextTop" FontSize="14">1/4</Span>
    </TextBlock>
</StackPanel>

4 个答案:

答案 0 :(得分:2)

是的,这个XAML输出也可以通过C#代码完成

<强>伪代码

创建StackPanel对象

创建一个TextBlock对象。将其TextWrapping属性设置为Wrap,将Width设置为455.

创建Span的多个对象。根据需要设置FontSize和其他属性(text,BaseAllighnemt)。

span个对象添加到Textblock.Inlines属性

将文本块添加到stackpanel

多数民众赞成

答案 1 :(得分:1)

解析XAML代码并创建与标记对应的对象,因此您可以通过直接创建对象来完成相同的操作。

因此,您只需创建Span对象并设置正确的属性,并将它们作为子对象添加到TextBlock对象中。

答案 2 :(得分:1)

实际上,几乎所有可以在Xaml中完成的都可以在C#中完成,因为Xaml在构建时被转换为C#(查找*.g.cs个文件)< /德尔>。您几乎可以使用您在Xaml中指定的相同类,并添加一些Xaml为您自动处理的新增功能。在这种情况下,你可以这样做:

var textblock = new TextBlock();
textblock.Inlines.Add(new Run("2") {FontSize = 20});
textblock.Inlines.Add(new Run("1/2") {FontSize = 14, BaselineAlignment = BaselineAlignment.TextTop});

答案 3 :(得分:1)

对于您发布的XAML,相信我,XAML更具可读性和紧凑性。要在代码中执行此操作,您必须实例化WindowStackPanel,将StackPanel添加到Window,将Window提供给它标题,高度和宽度属性等等。您已经在查看大约六行,当您开始实例化TextBlock并设置Span时,它会变得更加丑陋。

你绝对可以在没有XAML的情况下使用WPF,虽然我不确定你为什么会这么想。可以找到执行此操作的WPF程序的示例here。事实上,你的问题的反面是正确的。您可以在XAML中执行的所有操作都可以在C#中完成,但不能在C#中执行所有操作,您可以在XAML中执行。这是因为XAML映射直接执行公共运行时语言类,属性,事件等,但每个类和一段XAML代码之间不存在映射。

简而言之,XAML比纯代码更易于维护和编辑,并且需要更简单的工具(XML编辑器)才能使用,因此优于使用纯代码。