繁体   English   中英

在CS中访问XAML资源

[英]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的对象,但DataDocument空。

  • 源{Resources \\ ListData.xml} System.Uri

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已完全填充。

参考:如何从后面的代码中以XmlDocument的形式访问XmlDataProvider的数据?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM