Я собираюсь установить состояние CalibrationGridControl с помощью кнопки. Для этого CalibrationGridControl UserControl должен иметь x: Name (Blend даже добавляет его для меня, когда я настраиваю поведение GoToState. Проблема в том, что как только я добавляю x: Name = "CalibrationGridControl", я получаю следующую ошибку компиляции.
Ошибка CS0426 Имя типа «ViewModel» не существует в типе «TeachpendantControl» TeachPendantControl C: \ GitRepos \ SolutionName \ TheWPFControl \ Views \ HandeyeCalibration \ HandeyeCalibrationView.xaml 150 38 Построить активный компилятор
UserControl HandeyeCalibrationView ниже - это представление, которое будет отображаться внутри ContentControl в «TheWPFControl». TheWPFControl и HandyeCalibration.xaml находятся в одном проекте (библиотека WPF Control). Ниже приведена основная часть файла HandeyeCalibration.xaml, в которой я получаю сообщение об ошибке.
<UserControl
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm = "clr-namespace:TeachpendantControl.ViewModel"
xmlns:local = "clr-namespace:TeachpendantControl.Views"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:b = "clr-namespace:Wpf.Behaviours"
xmlns:HandeyeCalibration = "clr-namespace:TeachpendantControl.ViewModel.H"
xmlns:i = "http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei = "http://schemas.microsoft.com/expression/2010/interactions"
x:Class = "TeachpendantControl.Views.HandeyeCalibrationView"
mc:Ignorable = "d"
d:DataContext = "{d:DesignInstance {x:Type vm:HandeyeCalibrationViewModel},
IsDesignTimeCreatable=True}"
Height = "111.221"
Width = "276.813"
>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source = "../../ResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Mode = "OneWay"
Path = "HandeyeCalibrationViewModel"
Source = "{StaticResource Locator2}"/>
</UserControl.DataContext>
<Grid>
<UserControl>
...
<HandeyeCalibration:CalibrationGridControl
x:Name = "calibrationGridControl"
HorizontalAlignment = "Left"
Margin = "0"
VerticalAlignment = "Top"
Height = "106"
Width = "106"
Background = "#FF747474"/>
<Button Command = "{Binding AddCommand}"
Content = "{Binding AddText, UpdateSourceTrigger=PropertyChanged}"
Margin = "0,0,5,0">
<i:Interaction.Triggers>
<i:EventTrigger EventName = "Click">
<ei:GoToStateAction TargetName = "calibrationGridControl"
StateName = "{Binding NextPositionState, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
</UserControl>
Если я удалю только строку x: Name = "CalibrationGridControl", все компилируется нормально. Что могло быть не так, вызывая это странное сообщение об ошибке?
У меня есть вопросы о CalibrationGridControl. Если я просто удалю x: Name при добавлении его в другой пользовательский элемент управления, все компилируется. XAML для CalibrationGridControl выглядит следующим образом.
<UserControl x:Class = "TeachpendantControl.ViewModel.H.CalibrationGridControl"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:local = "clr-namespace:TeachpendantControl.ViewModel"
xmlns:i = "http://schemas.microsoft.com/expression/2010/interactivity;assembly=System.Windows.Interactivity"
xmlns:ei = "http://schemas.microsoft.com/expression/2010/interactions"
mc:Ignorable = "d"
d:DesignHeight = "300" d:DesignWidth = "300">
<UserControl.Resources>
<SolidColorBrush x:Key = "CalibrationGridCrossBrush" Color = "#FFFFDF00"/>
<SolidColorBrush x:Key = "CalibrationGridPositionTrainedFillBrush" Color = "#FFFFDF00"/>
<SolidColorBrush x:Key = "CalibrationGridPositionFillBrush" Color = "Black"/>
</UserControl.Resources>
<Grid>
...
</Grid>
</UserControl>
Выглядит действительно странно, но кажется правильным. Пользовательский элемент управления был создан в пространстве имен ViewModel (Visual Studio добавила его туда по умолчанию). .H я просто пробовал, так как до того, как это была HandeyeCalibration, и я хотел сделать так, чтобы не было риска столкновения классов и пространств имен, поэтому я просто установил его на H
Тем временем я воссоздал CalibrationGridControl как новый UserControl. Я поместил его в папку «Просмотры», а затем Visual Studio установил для пространства имен TeachpendantControl.Views. Теперь я получаю ту же ошибку компиляции, но он жалуется на тип Views вместо ViewModel.
Не могли бы вы добавить строку x: Class из представления CalibrationGridControl?
Проблема может заключаться в этом CalibrationGridControl, если он не может скомпилировать элемент управления (и этот элемент управления будет единственным элементом в пространстве имен), он не сможет найти пространство имен.
@MartinGrundy Я добавил код для CalibrationGridControl.xaml. В коде позади я удалил весь код, поэтому он выглядит как новый пользовательский элемент управления по умолчанию, но проблема все еще существует.
Является ли TeachpendantControl элементом управления и пространством имен?
@ mm8 Да, это правильно.
@ mm8 Ха! На основании вашего вопроса я предположил, что имеет смысл изменить имя класса TeachpendantControl на другое, отличное от имени пространства имен. Это помогло, и в качестве бонуса теперь работает и смешанная анимация. Не стесняйтесь сообщать, что имеет смысл изменить имя элемента управления, чтобы избежать столкновения классов и пространств имен, и я установлю его в качестве решения.





TeachpendantControl, по-видимому, является как типом и, так и пространством имен.
Вы должны либо изменить имя элемента управления, либо изменить имя пространства имен, чтобы избежать конфликта имен.
Похоже, проблема связана с этой строкой xmlns: HandeyeCalibration = "clr-namespace: TeachpendantControl. ViewModel.H" Правильно ли это пространство имен? Ваш контроль находится в пространстве имен "ViewModel"?