你好,
我需要将收据预览显示为 WPF 页面的一部分。附上收据样本。
收据上的每一行文本都可以有不同的对齐方式(一些居中,一些居右或居左)和颜色,具体取决于配置。此外,每种收据类型的行数可能会有所不同。我想知道要使用哪些控件来有效地实现这一点。我可以根据行数在后面的代码中动态创建标签,并使用不同的前景色以不同的方式对齐每个标签,但如果有的话,只是寻找一种有效的方法。收据的宽度不变,但长度可能。所有行和所有收据类型的字体都相同。任何想法都非常感谢。
谢谢
你好,
我需要将收据预览显示为 WPF 页面的一部分。附上收据样本。
收据上的每一行文本都可以有不同的对齐方式(一些居中,一些居右或居左)和颜色,具体取决于配置。此外,每种收据类型的行数可能会有所不同。我想知道要使用哪些控件来有效地实现这一点。我可以根据行数在后面的代码中动态创建标签,并使用不同的前景色以不同的方式对齐每个标签,但如果有的话,只是寻找一种有效的方法。收据的宽度不变,但长度可能。所有行和所有收据类型的字体都相同。任何想法都非常感谢。
谢谢
通常最好避免从后面的代码中动态添加标签或文本块等控件。这种类型的代码难以阅读,几乎不可能测试。相反,您应该使用视图模型类(查找 MVVM 模式)。您的视图模型可能具有返回 ReceiptItem 列表的属性,然后在您的视图(XAML 文件)中创建 ItemsControl 并将其绑定到您的 ReceiptItem 列表。现在您可以为 ReceiptItem 类创建一个模板,以便它们使用 Label、TextBlock 或您认为合适的任何内容显示所需的内容。
例如,在 C# 中,您需要两个类:
public class MyReceiptViewModel
{
public List<ReceiptItem> ReceiptItems { get; set; }
}
public class ReceiptItem
{
public string Content { get; set; }
public bool IsHighlighted { get; set; }
}
您的视图可能如下所示(假设您有一个 MyReceiptViewModel 实例作为数据上下文):
<ItemsControl ItemsSource="{Binding ReceiptItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Content}"
Foreground="{Binding IsHighlighted, Converter={StaticResource MyColorFromBooleanConverter}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>