例如,我想做一些类似于你在下面看到的内容,但是在代码背后。我看到很多使用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>
答案 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更具可读性和紧凑性。要在代码中执行此操作,您必须实例化Window
和StackPanel
,将StackPanel
添加到Window
,将Window
提供给它标题,高度和宽度属性等等。您已经在查看大约六行,当您开始实例化TextBlock
并设置Span
时,它会变得更加丑陋。
你绝对可以在没有XAML的情况下使用WPF,虽然我不确定你为什么会这么想。可以找到执行此操作的WPF程序的示例here。事实上,你的问题的反面是正确的。您可以在XAML中执行的所有操作都可以在C#中完成,但不能在C#中执行所有操作,您可以在XAML中执行。这是因为XAML映射直接执行公共运行时语言类,属性,事件等,但每个类和一段XAML代码之间不存在映射。
简而言之,XAML比纯代码更易于维护和编辑,并且需要更简单的工具(XML编辑器)才能使用,因此优于使用纯代码。