2016-03-27 18 views
2

私は現在C#とWPFを学んでいます。したがって、私は小さな音楽プレーヤーをプログラミングしています。しかし、今私は問題になった。私は、メニューアイテムや表示するための別のフレームを実装していました。別のフレームのプロパティと対話する方法はありますか? (C#/ WPF)

その後、私の問題が発生しました。私はMainWindow.XAML(.CS)にMediaElementを持っていて、Player.XAML(.CS)でその要素とやりとりする必要があります。 - 明らかにそれを制御します(MediaElementを一時停止、再生、停止などできます) 。他のクラスのCurrentPlaylist.XAML(.CS)は、現在のプレイリストをデータグリッドに表示します。それは情報を表示し、MediaElementと対話することができます(新しい曲/開始を設定して曲を再生する)。

私は実際に私は別のフレームを持っているときにそれを達成する方法については考えがありません。

ここに少しコードがあります。

MainWindow.XAML

<Grid> 
    <MediaElement Name="media" HorizontalAlignment="Left" Width="1" Height="1" LoadedBehavior="Manual" UnloadedBehavior="Stop" 
    MediaOpened="Element_MediaOpened" MediaEnded="Element_MediaEnded"/> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 


    <Frame Width="1280" Height="100" Grid.ColumnSpan="2" Grid.Row="1" VerticalAlignment="Bottom" Source="Player.xaml"></Frame> 

    <StackPanel HorizontalAlignment="Left" Width="50" Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Grid.ColumnSpan="2" Name="fullMenu" Background="{StaticResource flavorColor}" > 
     <Button Style="{StaticResource seeThrough}" Width="50" Height="70" x:Name="hamburgerMenu" Grid.Column="0" Grid.Row="0" BorderBrush="{x:Null}" Click="hamburger_Click" Cursor="Hand" HorizontalAlignment="Right"> 
      <Rectangle Width="30" Height="30"> 
       <Rectangle.Fill> 
        <DrawingBrush> 
         <DrawingBrush.Drawing> 
          <DrawingGroup> 
           <DrawingGroup.Children> 
            <GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" /> 
            <GeometryDrawing Brush="White" Geometry="F1M13,11L3,11 3,13 13,13z M13,7L3,7 3,9 13,9z M13,5L3,5 3,3 13,3z" /> 
           </DrawingGroup.Children> 
          </DrawingGroup> 
         </DrawingBrush.Drawing> 
        </DrawingBrush> 
       </Rectangle.Fill> 
      </Rectangle> 

     </Button> 

     <Button Click="default_Playlist_Click" x:Name="item1" Style="{StaticResource seeThrough}" Content="{Binding CurrentPlaylist.Name}" Visibility="Collapsed"></Button> 

     <Button Click="playlist_List_Click" x:Name="item2" Style="{StaticResource seeThrough}" Content="Playlists" Visibility="Collapsed"></Button> 

     <Button Click="full_Player_Click" x:Name="item3" Style="{StaticResource seeThrough}" Content="MaxPlayer" Visibility="Collapsed"></Button> 
    </StackPanel> 
</Grid> 

Player.XAML

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 



    <Slider x:Name="timeLine" Grid.Column="0" VerticalAlignment="Center"/> 
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal" Grid.Column="1" Grid.Row="2"> 

     <Button x:Name="previousSong" Width="75" Height="30" Margin="10,0,10,20"> 
      &lt;&lt; 
     </Button> 
     <Button Click="PlayPause" x:Name="playSong" Width="75" Height="30" Margin="10,0,10,20"> 
      || 
     </Button> 
     <Button x:Name="nextSong" Width="75" Height="30" Margin="10,0,10,20"> 
      &gt;&gt; 
     </Button> 
    </StackPanel> 
</Grid> 

Player.XAML.cs

public partial class Player : Page 
{ 

    private TimeSpan TotalTime; 
    DispatcherTimer timer; 
    private bool playerRunning = false; 
    private MainWindow mw; 
    MediaElement Media; 

    public Player(MainWindow mw) 
    { 
     this.mw = mw; 
     Media = mw.Media; 
     InitializeComponent(); 

     timeLine.AddHandler(MouseLeftButtonUpEvent, 
        new MouseButtonEventHandler(SeekMediaPosition), 
        true); 

     timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromSeconds(1); 
     timer.Tick += new EventHandler(timer_Tick); 
    } 


    public void timer_Tick(object sender, EventArgs e) 
    { 
     timeLine.Value = timeLine.Value + 1000; 
    } 

    private void PlayPause(object sender, RoutedEventArgs e) 
    { 
     if (Media.Source != null && playerRunning == true) 
     { 

      Media.Pause(); 
      playSong.Content = ">"; 
      playerRunning = false; 
     } 
     else if (Media.Source != null && playerRunning == false) 
     { 
      Media.Play(); 
      playSong.Content = "||"; 
      playerRunning = true; 
     } 
    } 

    private void Element_MediaOpened(object sender, EventArgs e) 
    { 
     timeLine.Maximum = Media.NaturalDuration.TimeSpan.TotalMilliseconds; 
     TotalTime = Media.NaturalDuration.TimeSpan; 
     timer.Start(); 

    } 


    private void Element_MediaEnded(object sender, EventArgs e) 
    { 
     Media.Stop(); 
    } 

    private void SeekMediaPosition(object sender, MouseButtonEventArgs args) 
    { 
     int val = (int)timeLine.Value; 
     Media.Position = new TimeSpan(0, 0, 0, 0, val); 
    } 
} 

これは私の最新のアイデアでした。しかし、私はそれがうまくいかないと思った。

皆さんが回答に少し気をつけていただければ幸いです。 :)

+0

「うまくいかない」とは全く有益ではありません! –

+0

新しいObjectで、MainWindow内のMediaElementを更新しないため、何も変更されません。 – horoTV

答えて

1

フレームで何を意味するのかよくわからないので、問題がある可能性があります。しかし、これは私のために働いた。 WMP(実際には、すべてのWindows Media技術が。私はそれをアンインストールしてください。)ので

' Configure open file dialog box 
Dim dlg As New Microsoft.Win32.OpenFileDialog() 
dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic) & "iTunes\iTunes Media\Music" 
dlg.FileName = "" ' Default file name 
dlg.DefaultExt = ".txt" ' Default file extension 
'dlg.Filter = "Music file (.mp3)|*.mp3;(.mp4)|*.mp4" ' Filter files by extension 
dlg.Filter = "Music file (.mp3,.m4a)|*.mp3;*.m4a" ' Filter files by extension 

' Show open file dialog box 
Dim result? As Boolean = dlg.ShowDialog() 

' Process open file dialog box results 
If result = True Then 
    ' Open document 
    Dim filename As String = dlg.FileName 
    Dim baseUri As New Uri(filename) 
    'MsgBox(filename) 

    myMediaElement.Stop() 
    myMediaElement.Source = baseUri 
    myMediaElement.Play() 

End If 

はまた、私はすべて一緒にメディア要素の使用を停止することを決めたあなたはiTunesとそれを使用し、問題は何もありません。私が次のパッケージを試してみると、ツール - > Nuget Package Manager - >ソリューションのNuGetパッケージの管理で見つけたパッケージを使います。オーディオ/音楽プレーヤーのようなものを検索してください。

私が見つけたもので、ボタンのビープ音には素晴らしいものがNAudioでした。

+0

私はWPFでフレームとしてリンクして表示するページを意味しました。 例: <フレームたHorizo​​ntalAlignment = "左" Grid.RowSpan = "2" ソース= "Menu.xaml"> – horoTV

+0

はそのようなフレームを使ったことがない、実際に私もページを使用したことがありません。 –

関連する問題