使用UserControl作为ResourceDictionary

时间:2017-05-17 08:27:53

标签: c# wpf xaml user-controls resourcedictionary

是否可以使用我在另一个UserControl中定义的资源,而不使用ResourceDictionary的额外文件。

我有一个UserControl" ViewCostumers"并在我定义一个DataTemplate与所有客户的ListView。 现在我写一个UserCotnrol" ViewOverview"其中出现相同的ListView。我想将LsitView保存在文件" ViewCostumer"如果可能的话。

提前致谢

编辑: 我试图做的是将DataTempalte / ListView保存在原始文件中。然后,我想从另一个文件引用该文件(这是一个UserControl)(比如资源字典,只有ViewCostumer是UserControl:

< ResourceDictionary> 
< ResourceDictionary.MergedDictionaries>         
< ResourceDictionary Source="View/ViewCostumer.xaml" /> 
< /ResourceDictionary.MergedDictionaries>
< /ResourceDictionary>

2 个答案:

答案 0 :(得分:1)

  

是否可以使用我在另一个UserControl中定义的资源,而不使用ResourceDictionary的额外文件。

不,不是。毕竟,这正是ResourceDictionaries的用途。

  

我想将资源保存在原始文件中(这是一个UserControl)。

如果您打算在除此特定UserControl之外的任何其他控件中使用资源,则不能也不应该这样做。如果您打算在任何其他控件中使用此资源,则在UserControl中定义资源是没有意义的。

你应该做的是在ResourceDictionary中定义公共资源,然后按照@Ephraim的建议合并到两个控件中。

答案 1 :(得分:0)

您可以将资源移动到应用程序范围。

专门查看Creating and Consuming Resource Dictionaries in WPF and Silverlight 移动资源到应用范围

我们的想法是将资源移到Application.xaml中,以便可以在整个应用程序中使用。

<强> Application.xaml

// Custom promisify
function promisify(fn) {
  /**
   * @param {...Any} params The params to pass into *fn*
   * @return {Promise<Any|Any[]>}
   */
  return function promisified(...params) {
    return new Promise((resolve, reject) => fn(...params.concat([(err, ...args) => err ? reject(err) : resolve( args.length < 2 ? args[0] : args )])))
  }
}

const readdirAsync = promisify(fs.readdir)
readdirAsync('./folderpath').then(filenames => console.log(filenames))