c# - 可以使值转换器只能由我的用户控件访问吗? (WPF)

标签 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 中访问这个转换器。

最佳答案

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

Your custom class must not be a nested class. Nested classes and the "dot" in their general CLR usage syntax interfere with other WPF and/or XAML features such as attached properties.

您当然可以解决这个问题 - 但这限制了您在代码隐藏中设置值转换器(这很讨厌 :-))

不过我很好奇,您为什么不希望其他类使用它?

关于c# - 可以使值转换器只能由我的用户控件访问吗? (WPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3419661/

相关文章:

c# - 关于 C# 短路评估的最佳实践是什么?

c# - 如何在启动进程之前重定向 STDIN .NET 进程

c# - 处理带有百分比字符的从右到左文本框的 WPF 问题

WPF - 有没有办法从 Canvas.Children 中删除特定的 child ?

c# - 在我的自定义文本框中读取表单中的所有文本框

c# - 单击时 WPF 可编辑 ComboBox SelectAll

c# - VS 2012 支持 Windows Mobile 6

c# - HttpWebRequest 未处理 "invalidcastexception"将 HttpWebResponse 转换为 System.Exception

c# - 带 ICommand 和 OnPropertyChanged 的​​ WPF 控件可见性

c# - 将 WPF DataGrid 直接绑定(bind)到 EntityCollection<T>