WPF в С# проблема с custom

521
24 января 2017, 20:57

Есть код XAML и есть класс CustomVisualFrameworkElement, который унаследован от FrameworkElement и реализует с помощью Visual некоторые фигуры. Но XAML почему то не видит данный класс, хотя я подключаю пространство, которое содержит класс CustomVisualFrameworkElement

КОД XAML:

<Window x:Class="RenderingWithVisuals.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:RenderingWithVisuals" //Вот тут я подключаю пространство в котором находится класс CustomVisualFrameworkElement       
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <StackPanel Name="MyStackPAnel">
        <Image Height="80" Name="MyImage" />
        <!--Теперь используем наш класс, который содержит в себе фигуры и инфраструктуру от FrameworkElement-->
        <custom: CustomVisualFrameworkElement/> //Вот тут не видит класс
    </StackPanel>
</Window>

Answer 1

Если с кодом всё в порядке, помогает следующий алгоритм:

  1. Убрать из XAML <local:CustomVisualFrameworkElement/>,
  2. Перекомпилировать проект и убедиться, что он компилируется без ошибок,
  3. Добавить <local:CustomVisualFrameworkElement/> назад.

Разоблачение магии: WPF компилирует проект в два прохода: сначала XAML (при этом генерируется код на C#), потом весь code-behind. Если у вас есть свежий класс в code-behind, который упомянут в XAML'е, то при компиляции XAML'а его ещё не видно, и первый этап компиляции проваливается. Убирая новый элемент, мы даём первому этапу компиляции завершиться, и компилятор наконец-то видит новый класс.

Да, это баг в Visual Studio.

READ ALSO
Логика в LINQ запросах

Логика в LINQ запросах

Можно сделать проверку переменной на null в LINQ запросе? Если переменная равна NULL то where не производит фильтрацию

373
Видеоплеер для WinForms

Видеоплеер для WinForms

В WinForm приложение нужно встроить видео плеерНеобходимы в основном только базовые команды - воспроизведение, пауза, стоп, перемотка (переместиться...

479
открыть файл Excel на чтение c#

открыть файл Excel на чтение c#

Задача забирать данные из файла Excel

654