2011-01-30 32 views
1

我在制作Silverlight时识别Silverlight工具包的namespases时遇到了很多麻烦,也许是因为我正在ASP.Net用户控件(* .ascx)文件中编写XAML代码。在ASCX用户控制文件中包含Silverlight XAML内容问题

我已谷歌搜索和搜索这里(堆叠?也许),但没有为我工作。

我确信这可以以某种方式完成,我以前见过它。

后,我们在(的.ascx)文件写XAML内容,我们把这些内容的( .xap文件),它通过XamlReader加载XAML内容在运行时并执行Silverlight的可执行文件。

这是ASCX文件的头部:

<%@ Control Language="C#" AutoEventWireup="false" CodeBehind="TargetChartByVisits2.ascx.cs" Inherits="Mynamespace.TargetChartByVisits2" %> 
<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" 
xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
xmlns:chartingprimitives="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
xmlns:data="clr-namespace:MyNamespace.MyCharts;assembly=MyNamespace.MyCharts" 
Width="350" Height="400"> 

我所试图做的是画在Silverlight工具包的图表,我有这样的XAML代码,以帮助数据绑定:

<controls:ObjectCollection x:Key="SeriesData"> 
    <asp:Repeater ID="Repeater1" DataSource="<%# vwMain %>" runat="server"> 
     <ItemTemplate> 
      <data:ChartDataElement MeasurementDate="<%# HttpUtility.HtmlEncode(Sql.ToString(Eval("MeasurementDate"))) %>" VisitReading="<%# HttpUtility.HtmlEncode(Sql.ToString(Eval("VisitAmount"))) %>" VisitTarget="<%# HttpUtility.HtmlEncode(Sql.ToString(Eval("Visit_TargetAmount"))) %>" /> 
     </ItemTemplate> 
    </asp:Repeater> 
</controls:ObjectCollection> 

我得到一个错误,即clr-namespace:System.Windows.Controls; assembly = System.Windows.Controls.Toolkit“是一个未知的命名空间,尽管我安装了工具包并且示例运行良好,而且我已经从

0123中添加了对此组件的参考(控件)
C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Toolkit\Apr10\Bin 

我正在使用VS2010,谢谢。

回答

3

我怀疑你会得到这个错误,因为你的XAP文件不包括工具包的DataVisualization DLL。在编译生成XAP的项目中,您需要添加对随后下载的Xaml可能引用的所有dll的引用。

即使XAML和代码在XAP项目不要为了使用这些DLL对于用来解析下载的XAML工作在下载XAML中所有的DLL引用一个XamlReader发现需要存在于XAP项目。

有一些替代品,但他们更加重视复杂,所以如果你能预料的引用预期的DLL要好得多。

它出现在你的印象中,Silverlight应用程序应该是什么的Silverlight软件开发工具包已经安装在客户端计算机上能够访问下。情况并非如此,只有编译的MSBuild或Visual Studio感兴趣的是使用已安装在机器上的内容。运行Silverlight应用程序只能使用什么被列入XAP或什么可以下载,它不能使用安装在客户端上的DLL。

+0

非常感谢你,我有一个错误,但至少现在我的轨道上。我会发布有关该错误的另一个问题。你是我的Jon Skeet :),另外感谢你证明这是可行的。 – 2011-01-31 10:30:02

1

如果您在aspx,ascx或html页面中使用Silverlight,则无关紧要,规则相同。 Silverlight是一个浏览器插件等内容必须嵌入一个HTML对象标签:

<object width="300" height="300" 
    data="data:application/x-silverlight-2," 
    type="application/x-silverlight-2" > 
    <param name="source" value="SilverlightApplication1.xap"/> 
</object> 

这是代码,你需要在你的ASCX页,而不是XAML放置类型。

查看How to: Add Silverlight to a Web Page by Using HTML了解更多信息。

+0

你没有得到我的权利,我不是一个初学者。我知道我在做什么。 XAML标记可以写成是ASCX文件,而不是嵌入我说的,但问题是,它无法识别的命名空间为有效的。 – 2011-01-30 17:30:11

0

Silverlight可以通过两种方式来实例化:

1)Silverlight的1风格的应用程序,只使用XAML和JavaScript。这没有托管代码,也没有UserControl。在这种情况下,您可以像这样粗略地嵌入XAML(因为现在很少使用它,所以我必须查看这个古老的语法)。

2)Silverlight 2+应用程序,使用托管代码。在这种情况下,您必须使用<object>标签。所以你不会像这样直接将XAML嵌入到ASCX文件中 - 相反,您将在Silverlight应用程序或Silverlight类库中创建XAML,生成一个.xap文件,并使用<object>标记指向.xap文件ASCX。

你能澄清你正在尝试做哪一个?看起来你想要#2(托管代码应用程序),但如果你想要做一个Silverlight 1风格的应用程序,请回应,并且我可以更新我的答案,确切地说如何做到这一点。