3

Silverlight プロジェクトに 1 つのメイン ページがあります。このページ内に 2 つのフレームがあります。1 つは Contents と呼ばれ、もう 1 つは Footer と呼ばれます。私が疑問に思っているのは、それがフッターのクリックイベントであるかどうかのコンテンツのコンテンツの変数を変更するにはどうすればよいですか?

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 に答える