我想将文本块绑定到编译为资源的文本文件。有没有办法像使用source属性和包uri一样绑定它?
<Image Source="pack://application:,,,/Properties/..."/>
答案 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>
当然,假设命名的文本文件是资源:
进一步阅读: