J'apprends actuellement C# et WPF. Par conséquent, je suis en train de programmer un petit lecteur de musique. Mais maintenant je suis arrivé à un problème. Je mettais en œuvre des cadres différents pour les éléments de menu et d'autres choses que je montre.Comment puis-je interagir avec une propriété dans un autre cadre? (C#/WPF)
Ensuite, mon problème est apparu. J'ai un MediaElement dans mon MainWindow.XAML (.CS) et je dois interagir avec cet élément aussi dans mon Player.XAML (.CS) - qui le contrôle évidemment (le joueur peut mettre en pause, jouer, arrêter, etc le MediaElement) . L'autre classe CurrentPlaylist.XAML (.CS) affiche la liste de lecture en cours dans une Datagrid. Il affiche des informations et peut interagir avec MediaElement (Réglage d'un nouveau morceau/Démarrer pour lire la chanson).
Je n'ai vraiment aucune idée sur la façon de l'atteindre quand j'ai des cadres différents.
Voici un peu de code.
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">
<<
</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">
>>
</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);
}
}
Ce fut ma dernière idée. Mais bon, je pensais que ça ne marcherait pas.
J'apprécierais que vous donniez un petit coup de pouce à la réponse. :)
"ne fonctionne pas" n'est pas informatif du tout! –
Puisqu'il s'agit d'un nouvel objet et qu'il ne met pas à jour le MediaElement dans ma MainWindow, il ne change rien. – horoTV