2

我有两个窗口(win1 和 win2)。在 win1.xaml 中,我有 mediaelement,我尝试从 win2 C# 源代码调用它,这迫使我拥有一个静态的 mediaelement。

所以我使用绑定来填充源,但是将方法调用为 mediaelement.play() 我该怎么做,因为 mediaelement 在 xaml 中声明并且不是静态的?

谢谢你的帮助。

win1.xml

<Grid x:Name="LayoutRoot" Width="630" Height="460" VerticalAlignment="Top" HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="626"></ColumnDefinition>
    <ColumnDefinition Width="24*"></ColumnDefinition>
</Grid.ColumnDefinitions>

    <StackPanel Height="440" Width="620" HorizontalAlignment="Right"  VerticalAlignment="Bottom" Margin="0,0,2,-12">
        <StackPanel Height="350" Width="587" Background="White" Margin="0,10,0,0">
            <!-- MediaElement -->
            <MediaElement Margin="10,11,10,0" Name="MediaElement1" Source="{Binding MediaElement1Source, Source={x:Static bindableSettings:BindingManager.Instance}}"
             Width="565" Height="330" LoadedBehavior="Manual" UnloadedBehavior="Close" Stretch="Fill" />
        </StackPanel>
    </StackPanel>

</Grid>

win1.xaml.cs MediaElement init 和其他一些东西

win2.xaml 只是一个按钮调用函数

win2.xaml.cs namespace MyApp { public partial class win2 : Window { public win2() { InitializeComponent(); }

    public static void MediaElement1_Play()
    {
        MessageBox.Show("MediaElement1_Play Called");
        win1.MediaElement1.Play();
        MessageBox.Show("MediaElement1_Play Exited");

        // Other statics stuff
    }
}

}

4

1 回答 1

0

我也尝试使用静态媒体元素(在后面的代码中将其定义为静态类成员)。它编译好,但没有声音会播放。我不确定为什么——也许你们中的一些专家会理解?我放弃了静态想法,转而将其包含在每个窗口的代码中。(不理想,因为我有一个代码块来操作它——在我的情况下播放通知声音——我现在在每个窗口中都复制了该代码。)如果有人有更好的解决方案,我很想听听。

于 2019-07-23T15:23:48.567 回答