类型引用找不到名为..... NOT的类型,因为缺少程序集名称

时间:2016-02-23 18:40:15

标签: c# wpf

为了提前明确这一点,我很清楚有关此错误的大量问题和答案是由于声明中缺少程序集名称而导致的,这不是这里的情况。

我在过去几天看到一些非常严重的不稳定代码看起来本身就会停止编译错误的投掷错误,然后在关闭然后重新打开VS之后神奇地再次开始工作,也有我的自定义控件停止出现在设计器中并吐出ctor()中的幻像错误然后修复自己和我的控件中的依赖属性从VS属性资源管理器中丢失但仍然可以从XAML访问....我想知道是否可能即时呈现某种形式VS中的bug,它发生在我发现VS中的bug导致我的g.cs文件中断之前...

  

严重级代码描述项目文件行抑制状态   错误类型引用找不到命名的类型   ' {CLR-名称空间:ODIF;装配= PluginInterface}全球&#39 ;. CustomControls_WinX86 xxxxxxxxx \ CustomControls_WinX86 \ ChannelBoxMenu.xaml 17

为我的用户控件完成XAML:

UserControl x:Name="ChannelBoxMenuControl" x:Class="CustomControls_WinX86.ChannelBoxMenu"
             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:CustomControls_WinX86"
             xmlns:ODIF="clr-namespace:ODIF;assembly=PluginInterface"
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="250">
    <Grid>
        <Menu x:Name="menu">
            <MenuItem x:Name="menuItem" BorderThickness="0" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Template="{DynamicResource MarginlessMenuItem}" Width="{Binding ActualWidth, ElementName=menu, Mode=OneWay}" Height="{Binding ActualHeight, ElementName=menu, Mode=OneWay}" >
                <MenuItem.Header>
                    <local:ChannelBox Width="{Binding ActualWidth, ElementName=menuItem, Mode=OneWay}" Height="{Binding ActualHeight, ElementName=menuItem, Mode=OneWay}" Channel="{Binding SelectedChannel, ElementName=ChannelBoxMenuControl}"/>
                </MenuItem.Header>
                <MenuItem.ItemTemplate>
                    <HierarchicalDataTemplate ItemsSource="{Binding Source={x:Static  ODIF:Global.ConnectedDevices}, Mode=OneWay}"><!--THIS IS WHERE THE ERROR IS THROWN-->
                        <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
                            <Image Source="{Binding StatusIcon}" Width="16" Height="16">
                                <Image.Style>
                                    <Style TargetType="{x:Type Image}">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Icon}" Value="{x:Null}">
                                                <Setter Property="Visibility" Value="Collapsed" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Image.Style>
                            </Image>
                            <TextBlock Text="{Binding DeviceName}"/>
                        </StackPanel>
                    </HierarchicalDataTemplate>
                </MenuItem.ItemTemplate>
            </MenuItem>
        </Menu>
    </Grid>
</UserControl>

我引用的程序集中的相关代码:

namespace ODIF
{
    public static class Global
    {
        internal static GlobalStore Store = new GlobalStore();
        public static AsyncObservableCollection<InputDevice> ConnectedDevices
        {
            get
            {
                return Store.inputDevices;
            }
        }
    }
    internal class GlobalStore
    {
        internal AsyncObservableCollection<InputDevice> inputDevices;
    }
}

另外值得注意的是,当我开始输入HierarchicalDataTemplate ItemsSource的路径时,intellisense选择路径ODIF:Global.ConnectedDevices就好并自动完成它,但随后抛出无法找到它的错误。 ...

1 个答案:

答案 0 :(得分:1)

对于为什么以上内容不起作用并不是真正的解释,我最好能告诉它。但是,如果有人遇到同样的问题,我的解决方法是在UserControl的类中创建一个静态属性,该属性引用另一个程序集中的静态属性:

添加到ChannelBoxMenu:UserControl

    public static AsyncObservableCollection<ODIF.InputDevice> ConnectedDevices
    {
        get
        {
            return Global.ConnectedDevices;
        }
    }

并将我的绑定修改为:

ItemsSource="{Binding ConnectedDevices, ElementName=ChannelBoxMenuControl}

它不像直接参考那样干净,但它有工作的好处。