在ASCX用户控制文件中包含Silverlight XAML内容问题

时间:2011-01-30 16:40:24

标签: .net silverlight

我在使Silverlight识别Silverlight工具包的名称空间时遇到了很多麻烦,可能是因为我在ASP.Net用户控件(* .ascx)文件中编写了XAML代码。

我在谷歌搜索并搜索过(堆积?可能),但没有任何对我有用。

我确信这可以以某种方式完成,我之前已经看过它。

在( .ascx)文件中写入XAML内容之后,我们将这些内容发送到( .xap)silverlight可执行文件,该文件在运行时通过XamlReader加载XAML内容。时间并执行它。

这是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 Toolkit中绘制图表,我有这个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“是一个未知的命名空间,即使我安装了工具包,样本运行良好,我' ve从

添加了对此程序集(控件)的引用
C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Toolkit\Apr10\Bin

我正在使用VS2010,谢谢。

3 个答案:

答案 0 :(得分:3)

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

即使在Xap项目中找到Xaml和Code,也不要使用这些dll,以便用于解析下载的Xaml的XamlReader工作,下载的Xaml中的所有dll引用都需要存在于Xap项目中。 / p>

有一些替代方案,但它们非常复杂,所以如果你可以预期更好的预期参考dll。

看来你的印象是,silverlight应用程序应该能够访问客户端计算机上安装的任何Silverlight SDK。情况并非如此,只有编译MSBuild或Visual Studio才会感兴趣,并使用机器上已安装的内容。运行Silverlight应用程序只能使用Xap中包含的内容或它可以下载的内容,它不能使用客户端上安装的dll。

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

2)Silverlight 2+应用,使用托管代码。在这种情况下,您必须使用<object>标记。因此,您不会像这样直接将XAML嵌入ASCX文件中 - 而是在Silverlight应用程序或Silverlight类库中使用XAML,构建.xap文件,并使用{{1指向.xap文件来自ASCX的标签。

你能澄清一下你想要做的吗?看起来你想要#2(托管代码应用程序),但是如果你想要做一个Silverlight 1风格的应用程序,请回复一下,我可以更新我的答案,确切地知道如何做到这一点。