|
xaml cdata
|
|||
---|---|---|---|
#18+
Добрый день. Взял пример xamlparser вида: MainWindow.xaml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
MainWindows.xaml.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
Теперь пытаюсь в редактируемое окно приложения вставить текстовый файлик xaml вида: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Получаю: ArgumentException: Не удается привязать целевой метод, поскольку его сигнатура или прозрачность безопасности несовместима с сигнатурой или прозрачностью безопасности типа делегата. Если из кнопки убрать Click="btnExitApp_Clicked", то кнопка нормально отображается. Как побороть? Какие советы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 11:34 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
я конечно не уверен, так как таким способом не пользовался, но по логике вещей, код должен быть скомпилирован для выполнения, когда вы загружаете XAML файл с помощью XAML reader'а, этого не происходит. Сам по себе метод существовать не может, он может существовать только в рамках какого то типа. Если создать ResourceDictionary и вставить туда ваш UserControl он при сборке VS начнет ругаться, что в файле ресурсе не указано имя класса (x:Class), в который этот метод будет добавлен при компиляции. То есть, нужно перед тем как загружать XAML загрузить сборку в текущий AppDomain в котором будет реализована логика работы вашего метода. Но это не точно, сам я таким не пользуюсь. Еще можно добавить к этой теме, что существует 2 XamlReader, один находится в пространстве имён System.Windows.Markup.XamlReader, а второй в System.Xaml.XamlReader, в 1 случае это полноценный класс, а во втором абстрактны, который наследует XamlXmlReader. Но результат у обоих один ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 12:02 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
какая у вас цель? лично я не вижу, не 1 причины использовать CodeBehind файлы, на много проще будет реализовать задуманное без всяких CodeBehind классов. Могу скинуть пример, но в примере будет 2 поля, 1 поле с XAML кодом представления, 2 поле с C# кодом модели представления. Всё это динамически загружается и вставляется в ContentControl. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 13:38 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
Идея взята с официального мискрософт: https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/code-behind-and-xaml-in-wpf#Prerequisites То есть делать так получается можно. Вопрос как реализовать выполнение хотя бы этого официального примера из документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 15:36 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
Roman Mejtes, Ваш пример бы с удовольствием изучил. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 15:39 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
microbashИдея взята с официального мискрософт: https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/code-behind-and-xaml-in-wpf#Prerequisites То есть делать так получается можно. Вопрос как реализовать выполнение хотя бы этого официального примера из документации. Если вы просто создадите UserControl это будет работать без проблем, по крайней мере у меня работало. суть в том, что когда вы собираете приложение эта часть кода будет размещена в классе указанном в свойстве x:Class корневого элемента и там скомпилировано. Метод, как я уже писал, не может существовать абы кабы, где попало, метод может быть только частью определенного типа, C# это полностью объектно-ориентированный язык программирования. Даже в статье, которую вы приложили сказано, что не рекомендуется применять этот подход. Так как он не очевидный, найти этот кусок кода будет крайне сложно, особенно если XAML файл будет в 2-3 экрана. про цель использования динамической загрузки кода вы так и не сказали, если это не тайна, лучше напишите. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 15:53 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
Roman MejtesЕсли вы просто создадите UserControl это будет работать без проблем, по крайней мере у меня работало. Ну так я разве не с UserControl экспериментирую... Вроде да. Roman Mejtesсуть в том, что когда вы собираете приложение эта часть кода будет размещена в классе указанном в свойстве x:Class корневого элемента и там скомпилировано. Метод, как я уже писал, не может существовать абы кабы, где попало, метод может быть только частью определенного типа, C# это полностью объектно-ориентированный язык программирования. Значит надо добавить x:Class в xaml? Пробовал по-разному, пока не помогло. Roman MejtesДаже в статье, которую вы приложили сказано, что не рекомендуется применять этот подход. Так как он не очевидный, найти этот кусок кода будет крайне сложно, особенно если XAML файл будет в 2-3 экрана. Ну у меня то пока нету файлов на 2-3 экрана. Так что пока таких сложностей не вижу. Roman Mejtesпро цель использования динамической загрузки кода вы так и не сказали, если это не тайна, лучше напишите. Посмотреть как работает xaml, baml, сборки и др. Конкретно от xaml хочется вытягивать его в виде текста по сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 16:41 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
XAML файл главной формы Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
CodeBehind класс формы Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81.
Немного базовых классов, они нужны, чтоб найти нужный тип модели представления и он имел необходимую реализацию, а так же простейший класс команд, в продакшн нужна нормальная версия класса которую нагуглите Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 15:06 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
Roman Mejtes, Ваш код у меня собрался, запустился, и главное вроде бы работает. Супер! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 09:44 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
Roman Mejtes, можете еще подсказать, как можно добавить элементы в xamlEditor, чтобы их видел codeEditor по имени? Т.е. вот здесь нужно чтобы элемент "status_message" был виден в behind-code. Может хорошо бы здесь как-то объявить пространство имен, т.к. у меня эти два блока как бы отдельный независимый модуль приложения. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 14:30 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
у FrameworkElement, который наследует ContentControl, нужно искать через метод FindName() https://msdn.microsoft.com/ru-ru/library/system.windows.frameworkelement.findname(v=vs.110).aspx искать нужно начиная с корневого элемента скоупа имён. В данном случае этот скоуп начинается с ContentControl (корневого элемента) и искать нужно по имени именно в нём. Можно элемент не только по имени найти, можно найти его в визуальном дереве. Просто FindName ищет только в рамках своего скоупа, то есть в шаблоне данных будут свои имена, в шаблоне элемента управления свои и они могут быть одинаковыми, так как в разных скоупах не пересекаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 16:05 |
|
xaml cdata
|
|||
---|---|---|---|
#18+
Через поиск попробую, но не верен что это хороший вариант... Было бы лучше: через binding или как-то думать в сторону областей видимости (если такое вообще возможно). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2018, 10:26 |
|
|
start [/forum/topic.php?fid=21&tid=1440446]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 519ms |
0 / 0 |