【问题标题】:Silverlight XAML layout issueSilverlight XAML 布局问题
【发布时间】:2010-05-29 17:27:21
【问题描述】:

我正在使用 Silverlight 3.0 + .Net 3.5 + VSTS 2008 + C# 使用 Silverlight 的开源 slvideoplayer 开发一个简单的视频应用程序。

http://slvideoplayer.codeplex.com/

对于播放器,播放控件位于渲染视频的底部,有什么想法如何将播放控件放置在视频顶部?我已经很努力但想不通。有什么解决办法吗?

编辑 1:这是当前的 XAML 代码,“controlsContainer”中的元素是我想放在视频之上的元素(即“mediaPlayer”),这是我想要的效果,如果你能让我知道如何更改我的代码来实现这个目标吗?

http://i45.tinypic.com/admgq0.png

<Grid x:Name="LayoutRoot">
        <Canvas x:Name="PlayIcon" Width="100" Height="100" Canvas.ZIndex="99" Cursor="Hand" MouseLeftButtonUp="PlayIcon_MouseLeftButtonUp">
            <Path Width="100" Height="100" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" Fill="#77000000" Data="F1 M 15,0L 85,0C 93.2843,0 100,6.71573 100,15L 100,85C 100,93.2843 93.2843,100 85,100L 15,100C 6.71573,100 0,93.2843 0,85L 0,15C 0,6.71573 6.71573,0 15,0 Z "/>
            <Path Width="40.8182" Height="47.1328" Canvas.Left="34.6439" Canvas.Top="27.6003" Stretch="Fill" Fill="#FFFFFFFF" Data="F1 M 75.4621,51.1667L 34.6439,27.6003L 34.6439,74.7331L 75.4621,51.1667 Z "/>
        </Canvas>
        <Canvas x:Name="LargeSpinnerArea" Width="100" Height="100" Canvas.ZIndex="100" Visibility="Collapsed">
            <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                <VideoPlayer:spinner x:Name="BigBuffer" Width="100" Height="100" RenderTransformOrigin="0.5,0.5" >
                    <VideoPlayer:spinner.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="4" ScaleY="4"/>
                            <SkewTransform/>
                            <RotateTransform/>
                            <TranslateTransform/>
                        </TransformGroup>
                    </VideoPlayer:spinner.RenderTransform>
                </VideoPlayer:spinner>
            </StackPanel>
        </Canvas>
        <Canvas x:Name="Thumbnail" Canvas.Top="0" Canvas.Left="0" Visibility="Collapsed" Canvas.ZIndex="98">
            <Image x:Name="ThumbnailImage" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stretch="UniformToFill" />
        </Canvas>
        <Grid x:Name="LayoutRoot2" Margin="0" Background="#FF0D0A0A" Cursor="Hand" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <Canvas x:Name="VideoCanvas">
                <MediaElement Canvas.ZIndex="1" HorizontalAlignment="Left" Margin="0,0,0,0" x:Name="mediaPlayer" Stretch="Uniform" VerticalAlignment="Stretch" AutoPlay="false"/>
            </Canvas>
        </Grid>
        <Grid Margin="-1,0,0,0" x:Name="controlsContainer" Height="35" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Bottom">
            <Grid.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform Y="0"/>
                </TransformGroup>
            </Grid.RenderTransform>
            <Rectangle Margin="0,0,0,0" Height="35" VerticalAlignment="Top" Fill="#97000000" Stroke="#00000000" RenderTransformOrigin="0.5,0.5"/>
            <VideoPlayer:mediaControl Height="35" Margin="1,0,2,0" HorizontalAlignment="Stretch" VerticalAlignment="Top" x:Name="mediaControls" RenderTransformOrigin="0.5,0" Visibility="Visible"/>
        </Grid>
    </Grid>

【问题讨论】:

    标签: c# .net xaml silverlight visual-studio-2008


    【解决方案1】:

    看到这个。对我来说很好。最后一行堆栈面板

                <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
                    <VideoPlayer:spinner x:Name="BigBuffer" Width="100" Height="100" RenderTransformOrigin="0.5,0.5" >
                        <VideoPlayer:spinner.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform ScaleX="4" ScaleY="4"/>
                                <SkewTransform/>
                                <RotateTransform/>
                                <TranslateTransform/>
                            </TransformGroup>
                        </VideoPlayer:spinner.RenderTransform>
                    </VideoPlayer:spinner>
                </StackPanel>
            </Canvas>
            <Canvas x:Name="Thumbnail" Canvas.Top="0" Canvas.Left="0" Visibility="Collapsed" Canvas.ZIndex="98">
                <Image x:Name="ThumbnailImage" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stretch="UniformToFill" />
            </Canvas>
            <Grid x:Name="LayoutRoot2" Margin="0" Background="#FF0D0A0A" Cursor="Hand" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Canvas x:Name="VideoCanvas">
                    <MediaElement Canvas.ZIndex="1" HorizontalAlignment="Left" Margin="0,0,0,0" x:Name="mediaPlayer" Stretch="Uniform" VerticalAlignment="Stretch" AutoPlay="false"/>
                </Canvas>
            </Grid>
            <Grid Margin="-1,0,0,0" x:Name="controlsContainer" Height="35" RenderTransformOrigin="0.5,0.5" VerticalAlignment="Bottom">
                <Grid.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform/>
                        <SkewTransform/>
                        <RotateTransform/>
                        <TranslateTransform Y="0"/>
                    </TransformGroup>
                </Grid.RenderTransform>
                <Rectangle Margin="0,0,0,0" Height="35" VerticalAlignment="Top" Fill="#97000000" Stroke="#00000000" RenderTransformOrigin="0.5,0.5"/>
    
            </Grid>
        <StackPanel Orientation="Horizontal" Height="35" VerticalAlignment="Top" >
            <VideoPlayer:mediaControl   Height="35" x:Name="mediaControls" />
        </StackPanel>
    </Grid>
    

    【讨论】:

    • 它是视频播放器的播放控件
    • 我试过你的代码,但是看不到进度条。你能看到进度条吗?
    • 将此添加到您的代码中: mediaControls.Media = mediaPlayer;它将创建进度条。或者创建新的 MediaElement 将其 Source 属性设置为您的视频并将其分配给 MediaControl.Media
    • 它是一个属性,用于获取或设置由 RenderTransform 声明的任何可能的渲染变换的中心点。如果您有 Expression Blend Studio,您可以使用此属性并查看它如何影响您的对象。例如,如果您更改 RenderTransformOrigin 并应用旋转变换,您的对象枢轴将根据该变换进行更改。
    • 顺便说一句,您不需要在此处设置 RenderTransformOrigin 属性
    【解决方案2】:

    浏览源代码,我看到 Page.xaml 底部有一个 StackPanel。交换 MediaElement 和其中的 Grid。

    【讨论】:

    • 嗨,汉斯,我用您的解决方案尝试了大约 1 小时,但失败了。我发布了我当前的 XAML 代码和我想要实现的效果,如果你能看一下并让我知道如何更改我的代码以实现我的目标,我将不胜感激? (您可以参考 EDIT 1 部分)
    • 我尝试将以下内容放入StackPanel,但没有显示出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多