【问题标题】:Including Silverlight XAML content in ASCX User Control files problem在 ASCX 用户控制文件问题中包含 Silverlight XAML 内容
【发布时间】:2011-01-30 16:40:23
【问题描述】:

我在让 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" 是一个未知的命名空间,尽管我已经安装了工具包并且示例运行良好并且我'已从

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

我正在使用 VS2010,谢谢。

【问题讨论】:

    标签: .net silverlight


    【解决方案1】:

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

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

    有一些替代方案,但它们非常复杂,因此如果您可以预期预期的引用 dll,那就更好了。

    您似乎认为 Silverlight 应用程序应该能够访问客户端计算机上已安装的任何 Silverlight SDK。情况并非如此,只有编译 MSBuild 或 Visual Studio 感兴趣并使用机器上已安装的内容。运行silverlight应用程序只能使用Xap中已经包含的或者可以下载的,不能使用客户端安装的dll。

    【讨论】:

    • 非常感谢,我遇到了一个错误,但至少我现在走上了正轨。我将发布有关该错误的另一个问题。你是我的 Jon Skeet :),再一次感谢你证明这是可行的。
    【解决方案2】:

    不管您是在 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

    【讨论】:

    • 你没听懂我的意思,我不是初学者。我知道我在做什么。 XAML 标记可以按原样写在 ASCX 文件中,而不是我正在谈论的 嵌入,但问题是它无法将命名空间识别为有效的。
    【解决方案3】:

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

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

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

    你能澄清一下你想做什么吗?似乎您想要#2(托管代码应用程序),但如果您确实想做一个 Silverlight 1 风格的应用程序,请回复,我可以准确地更新我的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多