.NET 5 WPF项目报错:同命名空间下TipBox控件不存在
问题描述
在.NET 5环境下基于Windows95-WPF项目开发时,遇到自定义控件识别问题:自定义控件TipBox与MainWindow同属RadioSim命名空间,且XAML已通过local前缀正确引用该命名空间,但始终报错“TipBox不存在于命名空间”。已尝试修改命名空间、校验文件引用等操作,当前仅需解决此控件识别问题,暂不处理依赖Windows95.dll的其他错误。
相关代码文件
MainWindow.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace RadioSim { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } }
MainWindow.xaml(报错位于第94行)
<Window x:Class="RadioSim.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:RadioSim" xmlns:windows95="clr-namespace:Windows95;assembly=Windows95" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" Background="#C3C3C3" ResizeMode="NoResize" Icon="Images/windows.ico"> <Grid> <StackPanel Orientation="Horizontal" Margin="20,12,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"> <TextBlock Text="Welcome to" FontFamily="Times New Roman" FontSize="28" FontWeight="SemiBold" TextOptions.TextRenderingMode="Aliased" TextOptions.TextFormattingMode="Display" TextOptions.TextHintingMode="Fixed" SnapsToDevicePixels="True" /> <TextBlock Text="Windows" FontFamily="Arial" FontSize="28" FontWeight="Black" Margin="6,0,0,0" TextOptions.TextRenderingMode="Aliased" TextOptions.TextFormattingMode="Display" TextOptions.TextHintingMode="Fixed" SnapsToDevicePixels="True" /> <TextBlock Text="95" x:Name="WindowsVersionTextBlock" FontFamily="Arial" FontSize="28" Margin="2,0,0,0" TextOptions.TextRenderingMode="Aliased" TextOptions.TextFormattingMode="Display" TextOptions.TextHintingMode="Fixed" SnapsToDevicePixels="True" Foreground="White" /> </StackPanel> <StackPanel Margin="0,48,16,0" HorizontalAlignment="Right" VerticalAlignment="Top"> <Button Width="115" Height="23" Margin="0,0,0,7" Content="What's New" /> <Button Width="115" Height="23" Margin="0,0,0,7" Content="Online Registration" Click="OnlineRegistration_Click" /> <Button Width="115" Height="23" Margin="0,0,0,7" Content="Next Tip" Click="NextTip_Click" /> </StackPanel> <Button Width="115" Height="23" Margin="0,0,16,16" HorizontalAlignment="Right" VerticalAlignment="Bottom" Content="Close" Click="CloseButton_Click" /> <Rectangle Stroke="#828282" Width="115" Height="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,16,51" /> <Rectangle Stroke="#FFFFFF" Width="115" Height="1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,16,50" /> <local:TipBox HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,48,0,0" Width="360" Height="160" x:Name="MainTipBox"> <local:TipBox.TipText> You can change this text by placing a file named 'tips.txt' near the program executable. It's a JSON list. </local:TipBox.TipText> </local:TipBox> <CheckBox Content="Show this Welcome Screen next time you start Windows" HorizontalAlignment="Left" Margin="20,0,0,19" IsChecked="True" IsEnabled="False" VerticalAlignment="Bottom" /> </Grid> </Window>
TipBox.xaml
<UserControl x:Class="RadioSim.TipBox" 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:RadioSim" mc:Ignorable="d" d:DesignHeight="152" d:DesignWidth="328" Name="Control"> <Grid Background="#FFFFFF"> <Border Background="Transparent" BorderThickness="1,1,0,0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderBrush="#828282" /> <Border Background="Transparent" BorderThickness="0,0,1,1" Margin="0,1,0,0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" BorderBrush="White" /> <Grid Background="#20FFFF00" Margin="1"> <StackPanel> <StackPanel Orientation="Horizontal" Margin="28,20,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"> <Image Source="Images/TipIcon.png" Width="23" Height="32" SnapsToDevicePixels="True" HorizontalAlignment="Left" VerticalAlignment="Top" RenderOptions.BitmapScalingMode="NearestNeighbor" /> <TextBlock FontFamily="Arial" FontWeight="Bold" FontSize="12" Text="Did you know..." Margin="18,6,0,0" TextOptions.TextRenderingMode="Aliased" TextOptions.TextFormattingMode="Display" /> </StackPanel> <TextBlock x:Name="TooltipText" Margin="69,0,40,0" FontFamily="Arial" TextWrapping="Wrap" xml:space="preserve" Text="{Binding ElementName=Control, Path=TipText}" TextOptions.TextRenderingMode="Aliased" TextOptions.TextFormattingMode="Display" /> </StackPanel> </Grid> </Grid> </UserControl>
TipBox.xaml.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace RadioSim { /// <summary> /// Interaction logic for TipBox.xaml /// </summary> public partial class TipBox : UserControl { public static readonly DependencyProperty TipTextProperty = DependencyProperty.Register("TipText", typeof(string), typeof(TipBox), new PropertyMetadata(string.Empty)); public string TipText { get { return (string) GetValue(TipTextProperty); } set { SetValue(TipTextProperty, value); } } public TipBox() { InitializeComponent(); } } }
解决步骤
- 确认项目文件引用:检查
TipBox.xaml和TipBox.xaml.cs是否被正确包含在项目中。右键项目→添加→现有项,确保两个文件都已添加;同时在文件属性中确认:TipBox.xaml的Build Action为Page,TipBox.xaml.cs的Build Action为Compile。 - 清理并重建项目:在Visual Studio中依次执行
生成→清理解决方案、生成→重建解决方案,清除编译缓存后重新生成。 - 验证命名空间一致性:确保所有文件的命名空间完全一致:
TipBox.xaml的x:Class属性为RadioSim.TipBox,TipBox.xaml.cs的namespace为RadioSim,MainWindow.xaml的x:Class为RadioSim.MainWindow,无大小写或拼写差异。 - 检查XAML命名空间引用:确认
MainWindow.xaml中的xmlns:local="clr-namespace:RadioSim"无拼写错误,WPF对命名空间的大小写、拼写严格敏感。 - 重置XAML设计器缓存:重启Visual Studio,或右键XAML文件→
查看代码后切换回设计器;若问题仍存在,可通过工具→导入和导出设置→重置所有设置重置VS配置。 - 确认目标框架版本:确保项目目标框架为.NET 5,无多框架版本混合情况(右键项目→属性→应用→目标框架)。
内容的提问来源于stack exchange,提问作者EMendes
相关产品推荐
相关产品推荐

