WPF X: имя вызывает имя типа «ViewModel» Ошибка компиляции - PullRequest
0 голосов
/ 28 августа 2018

Я намерен установить состояние CalibrationGridControl от кнопки. Чтобы сделать это, CalibrationGridControl UserControl должен иметь x: Name (Blend даже добавляет его для меня, когда я настраиваю поведение GoToState. Проблема в том, что как только я добавляю x: Name = "calibGridControl", я получаю следующую ошибку компиляции.

Ошибка CS0426 Имя типа «ViewModel» не существует в типе «TeachpendantControl». TeachPendantControl C: \ GitRepos \ SolutionName \ TheWPFControl \ Views \ HandeyeCalibration \ HandeyeCalibrationView.xaml 150 38 Build Active Compiler

UserControl HandeyeCalibrationView ниже является представлением, которое должно отображаться внутри ContentControl в «TheWPFControl». WPFControl и HandyeCalibration.xaml находятся в одном и том же проекте (библиотека управления WPF). Ниже приведена основная часть файла 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 = "calibGridControl", все компилируется просто отлично. Что может быть не так, вызывая это странное сообщение об ошибке?

У меня есть несколько вопросов о 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>

1 Ответ

0 голосов
/ 29 августа 2018

TeachpendantControl, очевидно, является типом и пространством имен.

Вам следует либо изменить имя элемента управления, либо изменить имя пространства имен, чтобы избежать конфликта имен.

...