可以只通过我的用户控件访问值转换器吗? (WPF)

时间:2010-08-05 22:18:30

标签: c# wpf wpf-controls

所以我养成了使用WPF / C#值转换器的习惯,因为它们非常棒。我通常只为值转换器设置一个文件夹,然后在我可能需要的任何xaml文件中访问它们。

我目前正在开发一个用户控件,它将包含一些我不希望其他类能够访问的值转换器。换句话说,值转换器存在于代码隐藏文件中,并且只能从该文件和关联的xaml访问。我的第一个想法是将它作为嵌套类放在文件后面的代码中,但我找不到从xaml文件中访问嵌套类的方法。我是朝着正确的方向前进还是我应该做的其他事情呢?

我可以用廉价的方式将这个控件放到自己的命名空间中,但这并没有真正解决我的问题。

感谢任何帮助或指导。谢谢!

以下是我想要的内容:

public partial class MyControl: UserControl 
{ 
     //misc code for control 
     private class MyValueConverter : IMultiValueConverter 
     {
      //conversion functions 
     }
}

是我的想法。

通常,从WPF访问值转换器,如:

`<local:MyValueConverter x:Key="MyValueConverter" />`

仅当它们位于同一名称空间中时才有效。如果它是嵌套类,我无法使它工作。我已经实现了让valueconverter只对这个用户控件可见的目标,但我无法弄清楚如何从xaml中访问它。

我的问题是从xaml访问此转换器。

2 个答案:

答案 0 :(得分:2)

这是不可能的(看here的原因 - 关于要求的第2段)

  

您的自定义类不能是嵌套类。嵌套类和一般CLR使用语法中的“点”会干扰其他WPF和/或XAML功能,例如附加属性。

你当然可以解决这个问题 - 但这限制你在代码隐藏中设置valueconverter(这很令人讨厌: - ))

我很好奇,为什么你不想让其他课程使用它?

答案 1 :(得分:1)

在您的代码隐藏文件中,将包含转换器代码的方法标记为private,就像您不希望在类外看到的任何其他方法或属性一样。请记住,XAML和代码隐藏文件(默认情况下)是同一个类的部分表示,因此您在代码隐藏文件中声明的任何内容(即使是私有的)仍然对相应的XAML文件可见。