3

我的 Silverlight 项目中有一个主页。我在这个页面中有两个框架。一个称为内容,另一个称为页脚。我想知道的是,如何更改内容中内容中的变量是否是页脚中的点击事件?

在 Mainpage.xaml 中:

<UserControl
    x:Class="SilverlightApplication10.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">



        <Grid x:Name="NavigationGrid" >

            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
        <navigation:Frame Grid.Row="1" x:Name="Contents" 
                              Source="/Home" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed">
            <navigation:Frame.UriMapper>
                <uriMapper:UriMapper>
                    <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
                    <uriMapper:UriMapping  Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
                </uriMapper:UriMapper>
            </navigation:Frame.UriMapper>
        </navigation:Frame>

        <StackPanel Grid.Row="2" Background="Silver" Width="528">
            <navigation:Frame Grid.Row="1" x:Name="Footer" 
                              Source="/Home" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed">
                <navigation:Frame.UriMapper>
                    <uriMapper:UriMapper>
                        <uriMapper:UriMapping Uri="" MappedUri="/Footer/Home.xaml"/>
                        <uriMapper:UriMapping  Uri="/{pageName}" MappedUri="/Footer/{pageName}.xaml"/>
                    </uriMapper:UriMapper>
                </navigation:Frame.UriMapper>
            </navigation:Frame>
        </StackPanel>
    </Grid>

</UserControl>

在 /Views/Page2.xaml 中:

<navigation:Page x:Class="PodcastPlayer.Page2"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="Page2 Page">
  <Grid x:Name="LayoutRoot">
        <MediaElement x:Name="player"   />
    </Grid>
</navigation:Page>

在 /Footer/Page2.xaml 中:

<navigation:Page x:Class="PodcastPlayer.Page2Fotter"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="Page2 Page">
  <Grid x:Name="LayoutRoot">
        <StackPanel  Orientation="Horizontal" >
            <StackPanel Height="30" Width="60" Background="Red">
                <TextBlock Padding="10" Foreground="White">Back</TextBlock>
            </StackPanel>

            <StackPanel Height="30" Width="60" Margin="10,0,0,0" Background="DarkGreen">
                <TextBlock x:Name="playtext" Padding="10" Foreground="White">Play</TextBlock>
            </StackPanel>

            <StackPanel Height="30" Width="60"  Margin="10,0,0,0" Background="Red">
                <TextBlock Padding="10" Foreground="White">Next</TextBlock>
             </StackPanel>   
        </StackPanel>
    </Grid>
</navigation:Page>

我想要的是,当您单击页脚中的“播放”按钮播放器时,媒体元素会在“内容”中播放。

player.Play()

我编写的程序是在 VB.NET 中编写的。但是可以使用 c# 的示例也被接受,非常感谢!

4

2 回答 2

1

通过导航框架处理这个问题的难点在于为被导航到的各种用户控件获取适当的句柄。我的建议是处理各种导航控件上的 Navigated 事件,然后从 NavigationEventArgs 的 Content 属性中获取对所需控件的引用。这样,您可以在相关用户控件的适当实例上调用所需的任何方法。

我在回答这个问题时采取了类似的方法。

当然,您可能还需要考虑是否真的需要针对此特定解决方案的导航框架的额外复杂性。至少乍一看,我不清楚为什么您实际上需要导航到这些特定控件。可以直接在 MainPage.xaml 中托管它们,然后您可以使用 FindName() 轻松获取它们。

于 2009-12-28T15:19:01.173 回答
1

您可以将播放器存储在这样的静态字段中:

public class DataClass
{
    public static MediaElement player;
}

这样您就可以从任何您喜欢的地方开始播放:

DataClass.player.Play();
于 2010-01-05T11:33:38.070 回答