2016-08-26 3 views
0

재생 중 맨 위로 가기 (오디오/비디오)wpf 윈도우 상단에 재생 중

플레이어가 실제로 표시하고 싶은지 확인하고 싶습니다.

도와주세요.

<MediaElement x:Name="player" /> 

XAML :

<CheckBox x:Name="allwaystop" Content="Always" Checked="allwaystop_Checked" /> 
<CheckBox x:Name="whileplaying" Content="While Playing" Checked="whileplaying_Checked"/> 
<CheckBox x:Name="nevertop" Content="Never" IsChecked="True" Checked="nevertop_Checked" /> 

Xaml.cs는 :

private void allwaystop_Checked(object sender, RoutedEventArgs e) 
{ 
    // Always top 
    Window parent = Window.GetWindow(this); 
    parent.Topmost = true;   
} 

private void whileplaying_Checked(object sender, RoutedEventArgs e) 
{ 
    //WhilePlaying 
    // What?? 
} 

private void nevertop_Checked(object sender, RoutedEventArgs e) 
{ 
    //Never top 
    Window parent = Window.GetWindow(this); 
    parent.Topmost = false; 
} 

제발 도와주세요.

whileplaying 체크 박스 코드에는 어떤 코드를 쓸 것입니까?

답변

1

우선, 라디오 버튼이 이러한 목적에 더 적합하다고 생각합니다.

둘째, 운 좋게도 프로젝트를 파고 있습니다 ... 여기에 더 많은 무료 코드가 있습니다. 개선의 여지가 있습니다.하지만 앞으로 나아갈 수는 있습니다. 다음 코드는 플레이어 상태 추적기를 구현하고 다양한 작업에 추적기를 사용합니다. 추적기 변수가 많은 메서드에 추가되어 플레이어 상태가 그에 따라 업데이트 될 수 있습니다. 이것은 아마도 @Bolu가 당신의 질문에 대답했을 때 염두에 두었던 것과 비슷할 것입니다.

<RadioButton x:Name="rdobtn_AlwaysTop" Content="Always top" HorizontalAlignment="Left" Margin="10,258,0,0" VerticalAlignment="Top" GroupName="WindowZIndex" Checked="SetWindowZIndex"/> 
<RadioButton x:Name="rdobtn_TopWhilePlaying" Content="Top while playing" HorizontalAlignment="Left" Margin="96,258,0,0" VerticalAlignment="Top" GroupName="WindowZIndex" Checked="SetWindowZIndex"/> 
<RadioButton x:Name="rdobtn_LetUserPick" Content="Who cares" HorizontalAlignment="Left" Margin="219,258,0,0" VerticalAlignment="Top" GroupName="WindowZIndex" IsChecked="True" Checked="SetWindowZIndex" /> 

    public static bool IsMediaPlaying = false;//something to keep track of the player state 

    private void play_Click(object sender, RoutedEventArgs e) 
    { 
     PlayMedia(); 
    } 

    public void PlayMedia() 
    { 
     if (IsMediaPlaying == false) 
     { 
      //nothing is playing 
      if (mePlayer.Source == new Uri(playlist[listbox4.SelectedIndex].Filepath, UriKind.RelativeOrAbsolute)) 
      { 
       //nothing is playing, but the player already has the correct file loaded 
       mePlayer.LoadedBehavior = MediaState.Play;//play it 
      } 
      else 
      { 
       //nothing is playing and the media player's loaded file(if any) is different than the selected file so play the selected file 
       mePlayer.Source = new Uri(playlist[listbox4.SelectedIndex].Filepath, UriKind.RelativeOrAbsolute); 
       mePlayer.LoadedBehavior = MediaState.Play; 
      } 
     } 
     else//something is already playing 
     { 
      if (mePlayer.Source == new Uri(playlist[listbox4.SelectedIndex].Filepath, UriKind.RelativeOrAbsolute)) 
      { 
       //the proper file is already playing 
      } 
      else 
      { 
       //something is playing but it looks like the user wants to play something different 
       mePlayer.Source = new Uri(playlist[listbox4.SelectedIndex].Filepath, UriKind.RelativeOrAbsolute); 
       mePlayer.LoadedBehavior = MediaState.Play; 
      } 
     } 
     IsMediaPlaying = true; 
     SetWindowZIndex(); 
    } 

    private void SetWindowZIndex(object sender, RoutedEventArgs e) 
    { 
     SetWindowZIndex(); 
    } 

    private void SetWindowZIndex() 
    { 
     if (rdobtn_AlwaysTop.IsChecked == true) 
     { 
      Window parent = Window.GetWindow(this); 
      parent.Topmost = true; 
     } 
     else if (rdobtn_TopWhilePlaying.IsChecked == true) 
     { 
      if (IsMediaPlaying == true) 
      { 
       Window parent = Window.GetWindow(this); 
       parent.Topmost = true; 
      } 
      else 
      { 
       Window parent = Window.GetWindow(this); 
       parent.Topmost = false; 
      } 
     } 
     else if (rdobtn_LetUserPick.IsChecked == true) 
     { 
      Window parent = Window.GetWindow(this); 
      parent.Topmost = false; 
     } 
    } 

    private void mePlayer_MediaFailed(object sender, ExceptionRoutedEventArgs e) 
    { 
     IsMediaPlaying = false; 
     RoutedEventArgs newEventArgs1 = new RoutedEventArgs(Button.ClickEvent); //Go to next 
     button1.RaiseEvent(newEventArgs1); 
    } 

    private void mePlayer_MediaEnded(object sender, RoutedEventArgs e) 
    { 
     IsMediaPlaying = false; 
     RoutedEventArgs newEventArgs = new RoutedEventArgs(Button.ClickEvent); //Go to next 
     button1.RaiseEvent(newEventArgs); 
    } 

    private void play_Click(object sender, RoutedEventArgs e) 
    { 
     PlayMedia(); 
    } 

    private void pause_Click(object sender, RoutedEventArgs e) 
    { 
     mePlayer.LoadedBehavior = MediaState.Pause; 
     IsMediaPlaying = false; 
    } 

    private void listbox4_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     PlayMedia(); 
    } 
+0

정말 고마워요. –

0

MediaElement에 대한 OnPlaying EventHandler 또는 IsPlaying 속성이 없기 때문에 약간 어렵습니다.

당신이 할 수있는 것은 :

  1. PlayPauseStop 방법으로 업데이트됩니다 속성 IsMediaPlaying을 만듭니다.
  2. whileplaying_Checked EventHandler에서 IsMediaPlaying을 확인하고 true이면 Topmost=true을 설정하십시오.
  3. 시작/재생 방법에서 whileplaying.IsChecked이 맞는지 확인하고, 맞으면 Topmost = ture을 설정하십시오. 설정 IsMediaPlaying = true
  4. 시작/재생 방법에서도 MediaElement.MediaEnded 이벤트와 MediaElement.MediaFailed 이벤트를 구독하십시오. 그리고 EventHandlerIsMediaPlaying=false으로 설정하고 whileplaying.IsChecked이 맞는지 확인하십시오. 사실 일 경우 Topmost = false입니다.
  5. whileplaying_UnChecked EventHandler에서 다른 옵션에 따라 Topmost을 설정하십시오. (즉, IsMediaPlaying 일 경우 Topmost=false)
+0

없음이 제대로 실제로 동의, –

+0

@TaniaAkter 재생을 결정하지 않고, 내가 내 대답에 말했듯이 어떤 OnPlaying 이벤트 핸들러 또는 IsPlaying 속성이 없기 때문에, 나는 더 좋은 방법이 없다 두려워. – Bolu

+0

나는 Bolu에 동의합니다. 내장 된 메커니즘이 부족하여 자신 만의 도구를 만들고 유지 관리해야합니다. +1 –