[英]Access XAML Resources in cs
App.xaml中
<XmlDataProvider x:Key="ListData" Source="Resources\ListData.xml" XPath="/Data"/>
我可以在xaml中的任何地方访问它。
但是... MainWindow.xaml.cs
InitializeComponent();
model.SetResource(this.FindResource("ListData"));
在构造函数App()
和MainWindow()
,this.Resources.Count =0。this.FindResource this.FindResource("ListData")
返回具有正确Source
的对象,但Data
和Document
空。
Model.cs:
internal void SetResource(object v)
{
_listData = (System.Windows.Data.XmlDataProvider)v;
_listData.InitialLoad();
}
该程序运行时不会返回任何异常或错误,但是不会产生任何数据。
_listData.Error null System.Exception
_listData.Document null System.Xml.XmlDocument
_listData.Data null object
如何在XAML和CS之间共享资源?
文件属性 Build Action
设置为Resource
。 这应该意味着该文件位于“ namespace.filename.extension,其中命名空间是Visual C#项目中DefaultNamespace属性的值”下的清单中。
我找不到以下内容:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Reflection.ManifestResourceInfo listDataInfo = assembly.GetManifestResourceInfo("MyNamespace.ListData.xml");
好的,这确实感觉像是一种破解,但是它确实可以工作。 您可以为此使用任何载体控制,我碰巧需要一个ComboBox ...
在.xaml文件中
<ComboBox Loaded="List_Port_Loaded" Tag="{Binding Source={StaticResource ListData}, XPath=Valves}" />
在.cs文件中
private void List_Port_Loaded(object sender, RoutedEventArgs e)
{
XmlElement valveXML = ((ComboBox)sender).Tag as XmlElement;
}
我愿意接受更好的答案...
App.xaml中:
<XmlDataProvider x:Key="ListData" Source="Resources\ListData.xml" XPath="/Data" IsInitialLoadEnabled="True" IsAsynchronous="False"/>
MainWindow.xaml.cs:
InitializeComponent();
model.SetListData((this.FindResource("ListData") as System.Windows.Data.XmlDataProvider).Document);
此XmlDocument已完全填充。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.