Dostęp do kontroli XAML w DataTemplate z CodeBehind?
Mam formant, który nie jest w stanie uzyskać dostępu do kodu źródłowego i wierzę, że jest tak, ponieważ jest zdefiniowany w DataTempalte.
Ogólna kontrola to karuzela pokazu slajdów. Każdy slajd może być obrazem lub MediaElementem (wideo), którego zawartość jest zdefiniowana w powiązaniu ItemSource. Karuzela jest na czasomierzu, aby przełączyć się z jednego slajdu na następny. Za każdym razem, gdy zmiany slajdu, uruchamiam zdarzenie w tym celu.
Kiedy trafię na slajd z filmem, chciałbym zatrzymać timer slajdów (zrobić to) i uruchomić wideo, w którym natrafiłem na problem. Nie mogę uzyskać dostępu doMediaPlayer
elementName
z mojego systemu kodowego. Moje założenie w tym momencie jest takie, że jest to DataTemplate.
Czy to założenie jest poprawne? Jeśli tak, w jaki sposób mogę uzyskać dostęp do tego elementu sterującego z poziomu kodu lub, co ważniejsze, czy może zacząć grać, gdy pojawi się slajd?
<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>