使用后台代码创建和显示控件

本文关键字:显示 控件 创建 代码 后台 | 更新日期: 2023-09-27 18:08:47

对于我的一个WPF项目,我需要集成VLC播放器,我一直在玩这个Codeplex项目的示例应用程序

然而,我需要在运行时创建多个播放器控件实例,并显示它设置其各种属性。玩家实例的数量是基于用户的选择。

我正试图将示例应用程序中给出的XAML转换为其等效代码。

<Wpf:VlcControl x:Name="myVlcControl" />
<Grid Grid.Row="0">
     <Grid.Background>
         <VisualBrush Stretch="Uniform">
             <VisualBrush.Visual>
                 <Image Source="{Binding ElementName=myVlcControl, Path=VideoSource}" />
             </VisualBrush.Visual>
         </VisualBrush >
    </Grid.Background>
</Grid> 

这是我到目前为止得到的

编辑:陈金诺回答后代码更新,但问题仍然存在。

    Grid g = new Grid();
    VlcControl p = new VlcControl();
    p.Media = new PathMedia(@"C:'movie.mkv");
    VisualBrush vbr = new VisualBrush();
    g.Background = vbr;
    vbr.Stretch = Stretch.Uniform;
    Binding binding = new Binding("VideoSource");
    binding.ElementName = "p";
    Image img = new Image();
    img.SetBinding(Image.SourceProperty, binding);
    vbr.Visual = img;
    g.Children.Add(p);                       
    this.grid1.Children.Add(g);
    p.Play();
有了上面的代码,当我运行应用程序时,我可以听到电影的声音,但看不到它。我错过了图像绑定(elementname和路径)在我的代码后面,但不知道如何做到这一点。

有人能告诉我一些文档(谷歌没有产生任何好的结果)或提供指针转换绑定在XAMl到它的等效代码后面?

多谢

使用后台代码创建和显示控件

        Binding binding = new Binding("VideoSource");
        binding.ElementName = "myVlcControl";
        Image img = new Image();
        img.SetBinding(Image.SourceProperty, binding);

我知道这个问题很老了,但我刚刚遇到了同样的问题,想分享一下解决方案。

其实Chen Kinnrot的答案是相当完整的,唯一需要做的就是修复绑定。

代替:

binding.ElementName = "myVlcControl";

应该是:

binding.Source = p; // p - the instance of the VlcControl

并与Chen代码组合:

Binding binding = new Binding("VideoSource");
binding.Source = p;
Image img = new Image();
img.SetBinding(Image.SourceProperty, binding);