コードビハインドでアクセスできないコントロールがありますが、それは DataTempalte で定義されているためだと思います。
全体的なコントロールは、スライド ショーのカルーセルです。各スライドは、Image または MediaElement (ビデオ) にすることができ、そのコンテンツは ItemSource バインディングで定義されます。カルーセルは、1 つのスライドから次のスライドに切り替えるためのタイマーになっています。スライドが変わるたびに、その効果のためにイベントを発生させます。
ビデオでスライドをヒットしたときに、スライド タイマーを停止して (完了)、ビデオを開始したいのですが、ここで問題が発生しました。MediaPlayer
コードビハインドから要素にアクセスできませんName
。この時点での私の仮定は、それが DataTemplate であるためです。
この仮定は正しいですか?もしそうなら、コードビハインドからこのコントロールにアクセスするにはどうすればよいですか、または (より要点を言えば) スライドが表示されたときに再生を開始するにはどうすればよいですか?
<ctrl:AutoScrollCarousel ...>
<ctrl:AutoScrollCarousel.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ctrl:AutoScrollCarousel.ItemsPanel>
<ctrl:AutoScrollCarousel.ItemTemplate>
<DataTemplate>
<Border x:Name="Border" VerticalAlignment="Center"
Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type UserControl},Mode=FindAncestor}}">
<Grid Background="White">
...
<Image Source="{Binding ContentImage}" Grid.Row="1" Grid.Column="1" Stretch="UniformToFill"
HorizontalAlignment="Center"
Visibility="{Binding ContentImage, Converter={StaticResource VisibilityConverter}}" />
<MediaElement Name="MediaPlayer" Source="{Binding ContentVideo}" Grid.Row="1" Grid.Column="1" Stretch="UniformToFill" LoadedBehavior="Play"
Visibility="{Binding ContentVideo, Converter={StaticResource VisibilityConverter}}" MediaEnded="MediaPlayer_MediaEnded" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title}" Foreground="Black"
FontFamily="Segoe UI" FontWeight="Light" HorizontalAlignment="Left" FontSize="75" Margin="0" VerticalAlignment="Center" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding ContentHeadline}" Foreground="Black"
FontFamily="Segoe UI" FontWeight="Light" HorizontalAlignment="Left" FontSize="50" VerticalAlignment="Center"
TextWrapping="Wrap">
</TextBlock>
</Grid>
</Border>
</DataTemplate>
</ctrl:AutoScrollCarousel.ItemTemplate>
</ctrl:AutoScrollCarousel>