Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Воспроизвести видео при конкретном условии в WPF 
V
    Опции темы
Anyone
Дата 20.10.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Мой контрол Parameter имеет такой шаблон:
Код

    <ControlTemplate x:Key="VideoParameterTemplate" TargetType="{x:Type local:Parameter}">
        <Grid>
            <Label Content="{TemplateBinding Value}" SnapsToDevicePixels="True" Background="Transparent" VerticalAlignment="Center" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" />
            <MediaElement IsHitTestVisible="False"
              Name="mediaElement"
              Stretch="Fill" >
              <MediaElement.Triggers>
                <EventTrigger RoutedEvent="MediaElement.Loaded">
                  <EventTrigger.Actions>
                    <BeginStoryboard Storyboard="{StaticResource MediaStoryBoardResource}"/>
                  </EventTrigger.Actions>
                </EventTrigger>
              </MediaElement.Triggers>
            </MediaElement>
        </Grid>
    </ControlTemplate>

Свойство Parameter.Value имеет тип object и мне нужно запускать и останавливать медиа элемент при определенных его значениях, к примеру при true - запускать, при false - останавливать. 
Но ума не приложу как это сделать.
Мне нужно в мой контрол добавить RoutedEvent, который будет возникать при изменениях значения свойства Value?
Или для каждого значения - свое маршрутизируемое событие?
Спасибо за любую идею.
PM MAIL   Вверх
Anyone
Дата 20.10.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Проблему решить помогли - задавать своство Source в зависимости от условия:
Код

    <MediaElement 
  IsHitTestVisible="False"
  Name="mediaElement"
  Stretch="Fill" 
  Source="{Binding RelativeSource={RelativeSource Self}, Path=Tag}">
        <MediaElement.Style>
            <Style TargetType="{x:Type MediaElement}">
                <Setter Property="Tag" Value="{x:Null}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Value="True">
                        <Setter Property="Tag" Value="./intro.wmv"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </MediaElement.Style>
    </MediaElement>



PM MAIL   Вверх
Anyone
Дата 21.10.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Только при этом мне еще нужно чтоб видео зацикливалось, но никак не получается...
Есть идеи как это сделать?
Дописал шаблон таким образом:
Код

    <ControlTemplate x:Key="VideoParameterTemplate" TargetType="{x:Type local:Parameter}">
        <Grid>
            <Border BorderBrush="Red" BorderThickness="1">
            <MediaElement
                  IsHitTestVisible="False"
                  Name="mediaElement"
                  Stretch="Fill" 
                  Source="{Binding RelativeSource={RelativeSource Self}, Path=Tag}">
                <MediaElement.Style>
                    <Style TargetType="{x:Type MediaElement}">
                        <Setter Property="Tag" Value="{x:Null}"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Value="True">
                                <Setter Property="Tag" Value="./video.wmv"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </MediaElement.Style>
                    <MediaElement.Triggers>
                        <EventTrigger RoutedEvent="MediaElement.MediaOpened">
                            <EventTrigger.Actions>
                                <BeginStoryboard x:Name="BeginStoryboard" Storyboard="{StaticResource MediaStoryBoardResource}"/>
                            </EventTrigger.Actions>
                        </EventTrigger>
                    </MediaElement.Triggers>
                </MediaElement>
            </Border>
        </Grid>
    </ControlTemplate>

Но при этом проблема возникает тогда, когда условие становится не верным и Source принимает значение null, возникает такой эксепшн: "Cannot set source on MediaElement driven by clock."

Как-то можно решить эту проблему, или нужно идти в другом направлении?
PM MAIL   Вверх
Anyone
Дата 21.10.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Вот решение моей проблемы, может кому-то пригодится:
Код

    <ControlTemplate x:Key="VideoParameterTemplate" TargetType="{x:Type local:Parameter}">
        <Grid>
            <ContentControl>
                <ContentControl.Resources>
                    <MediaElement x:Key="MediaElementPause" Style="{StaticResource MediaElementStyle}">
                        <MediaElement.Triggers>
                            <EventTrigger RoutedEvent="MediaElement.Loaded">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <MediaTimeline Source="./video.wmv" Duration="0:0:0.1"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </MediaElement.Triggers>
                    </MediaElement>
                    
                    <MediaElement x:Key="MediaElementPlay" Style="{StaticResource MediaElementStyle}">
                        <MediaElement.Triggers>
                            <EventTrigger RoutedEvent="MediaElement.Loaded">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <MediaTimeline Source="./video.wmv" RepeatBehavior="Forever" BeginTime="0:0:0.1"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </MediaElement.Triggers>
                    </MediaElement>
                </ContentControl.Resources>
                <ContentControl.Style>
                    <Style TargetType="ContentControl">
                        <Setter Property="Content" Value="{DynamicResource MediaElementPause}"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Value="True">
                                <Setter Property="Content" Value="{DynamicResource MediaElementPlay}"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
            <Label Content="{TemplateBinding Value}" SnapsToDevicePixels="True" Background="Transparent" VerticalAlignment="Center" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" />
        </Grid>
    </ControlTemplate>


Все очень просто.
В шаблоне имеется контентконтрол и в зависимости от условия в содержимое подставляется нужный ресурс.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.