尝试在 Visual Studio 2008 中编辑 UI 时出现 WPF 设计器异常

Posted

技术标签:

【中文标题】尝试在 Visual Studio 2008 中编辑 UI 时出现 WPF 设计器异常【英文标题】:WPF Designer exception while trying to edit UI in Visual studio 2008 【发布时间】:2010-10-04 10:23:16 【问题描述】:

我的机器上安装了带有 .net 3.5 SP1 的 VS2008,我编写了一个带有两个列表视图和数据绑定的简单应用程序,我的应用程序编译良好并且我能够运行它,但是当我尝试打开设计器来编辑控件时,我收到以下错误。 我不明白为什么会这样。任何想法...请参阅此错误消息下方的 xaml

程序集“PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”中的类型“MS.Internal.Permissions.UserInitiatedNavigationPermission”未标记为可序列化。 在 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型) 在 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型类型,StreamingContext 上下文) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器,ObjectWriter objectWriter) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器,ObjectWriter objectWriter) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo,NameInfo memberNameInfo,NameInfo typeNameInfo) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(对象图,Header[] inHeaders,__BinaryWriter serWriter,布尔 fCheck) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流序列化流,对象图,标头 [] 标头,布尔 fCheck) 在 System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeObject(对象 obj,MemoryStream stm) 在 System.AppDomain.Serialize(对象 o) 在 System.AppDomain.MarshalObject(对象 o) 在 System.Threading.CompressedStack.GetDomainCompressedStack(SafeCompressedStackHandlecompressedStack,Int32 索引) 在 System.Security.PermissionListSet.CreateCompressedState(CompressedStack cs,CompressedStack innerCS) 在 System.Threading.CompressedStack.CompleteConstruction(CompressedStack innerCS) 在 System.Threading.CompressedStack.GetCompressedStack(StackCrawlMark 和 stackMark) 在 System.Security.SecurityContext.Capture(ExecutionContext currThreadEC,StackCrawlMark 和 stackMark) 在 System.Threading.ExecutionContext.Capture(StackCrawlMark 和 stackMark) 在 System.Threading.ExecutionContext.Capture() 在 System.Windows.Threading.Dispatcher.BeginInvokeImpl(DispatcherPriority 优先级,委托方法,对象参数,布尔 isSingleParameter) 在 System.Windows.Threading.Dispatcher.BeginInvoke(DispatcherPriority 优先级,委托方法,对象 arg) 在 System.Windows.Input.CommandManager.RaiseRequerySuggested() 在 System.Windows.Input.CommandManager.InvalidateRequerySuggested() 在 Microsoft.Windows.Design.Interaction.Tool.TaskCollection.InsertItem(Int32 索引,任务项) 在 System.Collections.ObjectModel.Collection`1.Add(T 项) 在 Microsoft.Windows.Design.Interaction.SelectionTool..ctor() 在 MS.Internal.Providers.VSActiveToolProvider.SelectionToolFactory.TryCreateTool[T](T& 工具) 在 MS.Internal.Host.ToolSubsystem.ActivateTool(ToolFactory toolFactory) 在 MS.Internal.Host.ToolSubsystem..ctor(EditingContext editingContext, DesignerContext DesignerContext) 在 MS.Internal.Host.Designer.Load() 在 MS.Internal.Designer.VSDesigner.Load() 在 MS.Internal.Designer.VSIsolatedDesigner.VSIsolatedView.Load() 在 MS.Internal.Designer.VSIsolatedDesigner.VSIsolatedDesignerFactory.Load(IsolatedView 视图) 在 MS.Internal.Host.Isolation.IsolatedDesigner.BootstrapProxy.LoadDesigner(IsolatedDesignerFactory 工厂,IsolatedView 视图) 在 MS.Internal.Host.Isolation.IsolatedDesigner.BootstrapProxy.LoadDesigner(IsolatedDesignerFactory 工厂,IsolatedView 视图) 在 MS.Internal.Host.Isolation.IsolatedDesigner.Load() 在 MS.Internal.Designer.DesignerPane.LoadDesignerView()

XAML:

<Grid Name="pngrid_Base" Height="auto" Width="auto" Background="Beige">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" MinWidth="221"></ColumnDefinition>
        <ColumnDefinition Width="auto" MinWidth="1" MaxWidth="1"></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
    </Grid.ColumnDefinitions>
        <Grid Name="pngrid_BaseForAll" Grid.Column="0" Width="auto" HorizontalAlignment="Left" Background="#FFD8E4F8">
     <Grid.RowDefinitions>
        <RowDefinition Height="30*"/>
        <RowDefinition Height="164*" />
        <RowDefinition Height="35*" />
        <RowDefinition Height="164*" />
        <RowDefinition Height="40*" />
    </Grid.RowDefinitions>
        <ListView  Name="lstview_Unack" Grid.Row="1" Margin="2,0,0,0" SelectionMode="Extended"  LostFocus="lstview_Unack_LostFocus" 
                                                                                                MouseRightButtonDown="lstview_Unack_MouseRightButtonDown">

            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="IsSelected" Value="Binding Path=IsSelected, Mode=TwoWay" />
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
        <Button Grid.Row="2" HorizontalAlignment="Left" Margin="24,14,0,5" Name="btnFreeze">Freeze</Button>
            <Button Grid.Row="2" HorizontalAlignment="Left" Margin="12,7,0,5" Name="btnAcknowledge" Width="96">Acknowledge</Button>
        <ListView  Name = "lstview_Ack" Grid.Row="3" Margin="2,1,0,0" LostFocus="lstview_Ack_LostFocus" SelectionMode="Extended" MouseRightButtonDown="lstview_Ack_MouseRightButtonDown">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="IsSelected" Value="Binding Path=IsSelected, Mode=TwoWay" />                            
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>


        <Button Grid.Row="4" HorizontalAlignment="Left" Margin="16,12,0,7" Name="Clear" Width="78">Clear</Button>
    <TextBox Margin="110,6,32,5" Name="FilterText" TextChanged="FilterText_TextChanged" />
    <ComboBox HorizontalAlignment="Left" Margin="14,5,0,4" Name="comboColumnList" Width="94" />
</Grid>
    <GridSplitter Grid.Column="1" Name="gridSplitter1" Width="2" HorizontalContentAlignment="Center" VerticalContentAlignment="Stretch" HorizontalAlignment="Left" Background="Azure" />
    <Grid Name="pnGridForTreeView" Grid.Column="2" Width="200" Grid.ColumnSpan="2">
        <my:TrinityDeviceTree  x:Name ="m_objDeviceTree" Height="auto" Width="auto">

        </my:TrinityDeviceTree>
    </Grid>

</Grid>

【问题讨论】:

出现这种错误的原因可能是什么......似乎这个错误很常见,但解决方案不是......已经看到很多有这个错误的帖子 【参考方案1】:

我已经在 VS2008 中使用 .NET 3.5 SP1 测试了您的代码,如果我删除了 TrinityDeviceTree 的声明,它与设计器配合得很好。 也许你应该检查那个 UserControl 并在那里寻找错误。还要尝试清理您的项目并重新构建,有时它适用于视觉设计师的问题。

【讨论】:

以上是关于尝试在 Visual Studio 2008 中编辑 UI 时出现 WPF 设计器异常的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2012 未能检测到 Visual Studio 2008 构建工具

尝试在 Visual Studio 2008 中编辑 UI 时出现 WPF 设计器异常

Visual Studio 怎么反汇编

无法再使用 Visual Studio 2008 连接到 Visual Studio Team Services

将 JNI 链接到 Visual Studio 2008

将 xmllite.lib 添加到 Visual Studio 2008