![](/img/trans.png)
[英]How do I access a image control inside a XAML DataTemplate in a FlipView
[英]How do I access a control of a DataTemplate
我在UserControl資源中有兩個不同的DataTemplates。 一個DataTemplate包含一個圖像控件,另一個DataTemplate包含一個媒體元素控件。 每個DataTemplate的DataType分別代表一個ImageViewModel和一個VideoViewModel。 在我的用戶控件中,有一個包含ContentControl的網格。 內容控件的content屬性綁定到一個屬性,該屬性表示應使用的當前視圖模型。
想法是根據當前視圖模型更改網格的內容
<UserControl.Resources>
<DataTemplate DataType="{x:Type vm:ImageScreensaverViewModel}">
<Image Source="{Binding Image}" Stretch="Uniform"/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:VideoScreensaverViewModel}">
<MediaElement x:Name="Player" Source="{Binding Video}" LoadedBehavior="Play" />
</DataTemplate>
</UserControl.Resources>
<UserControl.CommandBindings>
<CommandBinding Command="MediaCommands.Pause" Executed="PausePlayer" CanExecute="CanExecute"/>
<CommandBinding Command="MediaCommands.Play" Executed="PlayPlayer" CanExecute="CanExecute"/>
</UserControl.CommandBindings>
<Grid>
<ContentControl x:Name="ScreanSaverContent" Content="{Binding CurrentVm}"/>
</Grid>
這很好用,但是我需要在后面的代碼中訪問MediaElement,以便可以控制媒體播放器(播放,停止,暫停)
我已經嘗試過將解決方案發布在hier上,但沒有成功。 我只能通過content屬性訪問選定的視圖模型。
嘗試這段代碼到達ContentPresenter內部的控件:
public static FrameworkElement GetControlByName(DependencyObject parent, string name)
{
int count = VisualTreeHelper.GetChildrenCount(parent);
for (var i = 0; i < count; ++i)
{
var child = VisualTreeHelper.GetChild(parent, i) as FrameworkElement;
if (child != null)
{
if (child.Name == name)
{
return child;
}
var descendantFromName = GetControlByName(child, name);
if (descendantFromName != null)
{
return descendantFromName;
}
}
}
return null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.