Возможно ли сделать конвертер значений доступным только для моего пользовательского элемента управления?(WPF) - PullRequest
2 голосов
/ 06 августа 2010

Так что я привык использовать конвертеры значений 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" />`

Это работает, только если они находятся в одном и том же пространстве имен.Я не могу заставить это работать, если это вложенный класс.Я выполнил свою задачу, чтобы преобразователь значений был виден только этому пользовательскому элементу управления, но я не могу понять, как к нему обращаться из xaml.

Моя проблема - доступ к этому преобразователю изXAML.

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Это невозможно (смотрите здесь по причине - 2-й абзац о требованиях)

Ваш пользовательский класс не должен быть вложенным.Вложенные классы и «точка» в их общем синтаксисе использования CLR мешают другим функциям WPF и / или XAML, таким как вложенные свойства.

Конечно, вы можете обойти это, но это ограничивает вас настройкойпреобразователь значений в коде (который хреновый: -))

Мне любопытно, почему бы вам не захотеть использовать другие классы?

1 голос
/ 06 августа 2010

В вашем файле с выделенным кодом отметьте методы, которые содержат код вашего конвертера, как private точно так же, как и любые другие методы или свойства, которые вы не хотели бы видеть вне класса.Помните, что XAML и файл с выделенным кодом являются (по умолчанию) частичными представлениями одного и того же класса, поэтому все, что вы объявляете в своем файле с выделенным кодом, даже если оно является закрытым, все еще отображается в соответствующем файле XAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...