这个问题让我感到很沮丧。
我从源代码下载了demo / sample项目,将其加载到Visual Studio中,然后运行就好了。引用,命名空间和一切都在工作。
因此,我决定将引用和适当的程序集命名空间添加到我自己的项目中,以将开源解决方案合并到其中。
它不起作用:我一直得到“命名空间中名称Gauge不存在”
我非常沮丧,我将源代码中的代码同样复制到我的项目中。它仍然无法运作。我已经在Visual Studio 2010和Visual Studio 2013上测试了演示/示例项目,它可以工作。
导入此内容时,我做错了什么?
这是同时工作但不起作用的代码:
<Window x:Class="WpfGauge.Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="win"
Width="825"
SizeToContent="WidthAndHeight"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="MainWindow"
xmlns:g="clr-namespace:WpfGauge;assembly=WpfGauge">
<Grid>
<StackPanel>
<g:Gauge DockPanel.Dock="Left"
Height="300"
Width="300"
AutoScale="True"
MinValue="2"
MaxValue="12"
ValueFormat=" {}{0} rph" />
</StackPanel>
</Grid>
</Window>
和C#代码:
using System.Windows;
using WpfGauge;
using System.Windows.Threading;
using System;
namespace WpfGauge.Test
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public readonly DependencyProperty RunsPerHourProperty =
DependencyProperty.Register("RunsPerHour",
typeof(double), typeof(MainWindow));
public double RunsPerHour
{
get { return (double)base.GetValue(RunsPerHourProperty); }
set { base.SetValue(RunsPerHourProperty, value); }
}
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (args, e) =>
{
RunsPerHour = (double)DateTime.Now.Second;
};
timer.Start();
}
}
}
我对这件事情的结束......
答案 0 :(得分:1)
从错误中可以明显看出 Gauge
类未通过XAML文件解析。
以下是您必须复制/粘贴的命名空间:
xmlns:g="clr-namespace:WpfGauge;assembly=WpfGauge"
我想在你的情况下,WpfGauge.Test
下存在Gauge命名空间。此外,如果此XAML文件和Gauge类存在于同一程序集(项目)中,则可以完全省略程序集路径。
xmlns:g="clr-namespace:WpfGauge.Test
但是如果汇编不同,它应该是这样的:
xmlns:g="clr-namespace:NameSpaceOfGaugeClass;assembly=AssemblyNameOfGaugeClass"
答案 1 :(得分:0)
您可能需要将实际的DLL拖放到工具箱中。我一直这样做。打开用户控制文件所在的文件夹(bin \ debug),然后将DLL拖到IDE中工具箱的常规部分。