Создание и отображение элемента управления с помощью кода позади - PullRequest
0 голосов
/ 17 сентября 2011

Для одного из моих проектов WPF мне нужно интегрировать проигрыватель VLC, и я играл с примером приложения из этого Codeplex Project

Однако мне нужно создать более 1 экземпляра элемента управления проигрывателем во время выполнения и отобразить его, задав его различные свойства. Количество экземпляров игроков зависит от выбора пользователя.

Я пытаюсь преобразовать 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();

С приведенным выше кодом, когда я запускаю приложение, я слышу звук фильма, но не вижу его. Мне не хватает привязки изображения (имя элемента и путь) в моем коде, но я не знаю, как это сделать.

Может ли кто-нибудь указать мне на некоторые документы (поиск в Google не дает хороших результатов) или предоставить указатели для преобразования Binding в XAMl в эквивалентный ему код?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 08 мая 2012

Я знаю, что этот вопрос довольно старый, но я только что столкнулся с той же проблемой и решил поделиться решением.

На самом деле ответ Чена Киннрота довольно полный, единственное, что нужно, это исправить привязку.

вместо:

binding.ElementName = "myVlcControl";

должно быть:

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

и в сочетании с кодом Чена:

Binding binding = new Binding("VideoSource");
binding.Source = p;
Image img = new Image();
img.SetBinding(Image.SourceProperty, binding);
1 голос
/ 17 сентября 2011
        Binding binding = new Binding("VideoSource");
        binding.ElementName = "myVlcControl";
        Image img = new Image();
        img.SetBinding(Image.SourceProperty, binding);
...