Silverlight自定义启动画面中的ProgressBar

时间:2009-08-07 14:43:02

标签: silverlight progress-bar splash-screen

如何在自定义初始屏幕中嵌入Silverlight ProgressBar控件?我将以下内容放入松散的xaml(简化为简洁):

<Grid xmlns="http://schemas.microsoft.com/client/2007"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <ProgressBar />
</Grid>

错误消息如下: 错误:Silverlight应用程序中的未处理错误 代码:2007
类别:ParserError
消息:未知元素:ProgressBar。

ProgressBar不是 http://schemas.microsoft.com/winfx/2006/xaml/presentation 名称空间中定义的标准控件吗?

2 个答案:

答案 0 :(得分:0)

由于存在进度条,我假设SL2或SL3 - 它已在SL2中添加。

未声明/ winfx / 2006 / xaml / presentation名称空间 - 但肯定在它所在的SL2 / 3中。您已使用备用http://schemas.microsoft.com/client/2007,这是SL1.0的旧命名空间

给出的代码可以工作,但为了重现,我必须将根元素作为用户控件,并且命名空间必须驻留在那里,否则无法识别usercontrol标记本身。

<UserControl x:Class="myApp.scratchpad"
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
       <ProgressBar />
    </Grid>
</UserControl>

在SL3中工作得很好。

您可以发布更多页面,根元素,更新对SL2 / 3命名空间的引用,还说明正在使用哪个SL版本?

答案 1 :(得分:0)

如果这是对象标记的SplashScreenSource属性,则XAML必须是Silverlight 1 + JavaScript(非托管XAML)以下是如何执行此操作:(取自Silverlight SDK here

<Canvas Background="Black" Width="302" Height="52">
    <Rectangle Canvas.Left="1" Canvas.Top="1" Width="300" Height="30" Fill="White"/>
    <Rectangle x:Name="progressBarFill" Canvas.Left="1" Canvas.Top="1" Height="30" Fill="Blue"/>
</Canvas>

然后使用JS函数更新进度:

function onProgressChanged(sender, eventArgs)
{
    var slPlugin = sender.getHost();
    slPlugin.content.findName("progressBarFill").width = eventArgs.progress * 300;
}