绑定到资源文本文件

时间:2016-12-09 14:40:33

标签: wpf xaml data-binding text-files

我想将文本块绑定到编译为资源的文本文件。有没有办法像使用source属性和包uri一样绑定它?

<Image Source="pack://application:,,,/Properties/..."/>

1 个答案:

答案 0 :(得分:2)

嗯,你当然不能以完全相同的方式做到这一点。如果你试试这个:

<TextBox Text="pack://application:,,,/Properties/..."/>

...它只是将包uri显示为文本 - 而不是你想要的。

一种可能的解决方案是创建自己的MarkupExtension。例如:

public class TextExtension : MarkupExtension
{
    private readonly string fileName;

    public TextExtension(string fileName)
    {
        this.fileName = fileName;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        // Error handling omitted
        var uri = new Uri("pack://application:,,,/" + fileName);
        using (var stream = Application.GetResourceStream(uri).Stream)
        {
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
}

XAML的用法:

<Window
    x:Class="WPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wpf="clr-namespace:WPF">
    <TextBlock Text="{wpf:Text 'Assets/Data.txt'}" />
</Window>

当然,假设命名的文本文件是资源:

enter image description here

进一步阅读: