静态MediaElement

时间:2013-02-23 14:55:50

标签: c# wpf binding static mediaelement

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

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

感谢您的帮助。

win1.xaml

<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>

<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
    }
}

1 个答案:

答案 0 :(得分:0)

我也尝试使用静态中介元素(在后面的代码中将其定义为静态类成员)。它编译正常,但没有声音播放。我不确定为什么-也许你们当中的一些专家会理解吗?我放弃了静态想法,然后又将其包含在每个窗口的代码中。 (这不理想,因为我有一段代码可以操纵它(在我的情况下,播放通知的声音),并且我现在在每个窗口中都重复了该代码。)如果有人有更好的解决方案,我很想听听。 / p>