所以我养成了使用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访问此转换器。
答案 0 :(得分:2)
这是不可能的(看here的原因 - 关于要求的第2段)
您的自定义类不能是嵌套类。嵌套类和一般CLR使用语法中的“点”会干扰其他WPF和/或XAML功能,例如附加属性。
你当然可以解决这个问题 - 但这限制你在代码隐藏中设置valueconverter(这很令人讨厌: - ))
我很好奇,为什么你不想让其他课程使用它?
答案 1 :(得分:1)
在您的代码隐藏文件中,将包含转换器代码的方法标记为private
,就像您不希望在类外看到的任何其他方法或属性一样。请记住,XAML和代码隐藏文件(默认情况下)是同一个类的部分表示,因此您在代码隐藏文件中声明的任何内容(即使是私有的)仍然对相应的XAML文件可见。