2

例如,我想做一些与您在下面看到的类似的事情,但在代码后面。我看到大量使用 XAML 的示例,但在 C# 中没有做同样的事情。所以我的猜测是否定的。谢谢。

在此处输入图像描述

<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

4 回答 4

2

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

伪代码

创建一个StackPanel对象

创建一个TextBlock对象。将它的TextWrapping属性设置为 Wrap 和Width为 455。

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

span对象添加到Textblock.Inlines属性

将文本块添加到堆栈面板

就是这样

于 2012-08-03T16:11:09.020 回答
1

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

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

于 2012-08-03T16:11:06.327 回答
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});
于 2012-08-03T16:11:21.050 回答
1

对于您发布的 XAML,相信我,XAML 更具可读性和紧凑性。要在代码中执行此操作,您必须实例化WindowStackPanel,将 添加StackPanelWindow,提供Window其标题、高度和宽度属性等。您已经查看了大约六行代码来做到这一点,当您开始实例化TextBlock和设置Span.

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

长话短说,XAML 比纯代码更易于维护和编辑,并且需要更简单的工具(XML 编辑器)才能使用,因此比使用纯代码更可取。

于 2012-08-03T16:15:15.490 回答