我有TabControl,我希望TabItems的内容中有视频。 我有将视频添加到标签内容的方法:
private void AddVideosFromListToTab(IEnumerable<VideoClass> list, TabItem tab)
{
var stackPanel = new StackPanel { Orientation = Orientation.Horizontal };
foreach (
var media in
list.Select(
video =>
MediaUriElementHelper.CreatePreviewMediaElementUri(video.SamplePath(), 200, 150, mediaPreviewControls,
mediaPlayer_MouseDown)))
{
stackPanel.Children.Add(media);
}
stackPanel.Children.Add(new TextBlock {Text = "Some text"});
tab.Content = stackPanel;
}
这是我用视频创建媒体的方法。我正在使用MediaUriElement,因为它的性能更好。
public static MediaUriElement CreatePreviewMediaElementUri(string sourceFile, int width, int height, List<MediaUriElement> listMedias, System.Windows.Input.MouseButtonEventHandler mouseDown)
{
var media = new MediaUriElement();
media.BeginInit();
media.Width = width;
media.Height = height;
media.Margin = new Thickness(20);
media.Volume = 0;
media.LoadedBehavior = WPFMediaKit.DirectShow.MediaPlayers.MediaState.Play;
media.MouseDown += mouseDown;
media.Loop = true;
media.Source = new Uri(sourceFile);
media.EndInit();
listMedias.Add(media);
return media;
}
当应用加载时没关系,但是当我选择另一个标签时没有视频,当我回到第一个标签时,就不再有了。我添加了一些文字,总是存在。所以问题在于MediaUriElement。有人知道如何解决这个问题吗?感谢
答案 0 :(得分:0)
我认为因为普通的TabConrol只有一个contentPresenter,所以它会先前的内容。 如果是这样,这应该工作: Stop TabControl from recreating its children
答案 1 :(得分:0)
我已经设法修复它而不使用TabControlEx(因为它对我来说也没有用)。 我已经使用了Datatemplates和templateselector来在标签之间切换。
的Xaml:
<Window.Resources>
<local:MainTabViewDataTemplateSelector x:Key="myMainContentTemplateSelector" />
<DataTemplate x:Key="Dashboard">
<views:DashboardView />
</DataTemplate>
<DataTemplate x:Key="SystemHealth">
<views:SystemHealthView />
</DataTemplate>
</Window.Resources>
<TabControl ItemsSource="{Binding MainTabs}"
Margin="0,33,0,0"
Grid.RowSpan="2"
SelectedIndex="0"
Width="auto"
Style="{DynamicResource TabControlStyleMain}"
ContentTemplateSelector="{StaticResource myMainContentTemplateSelector}"
Padding="20" Grid.ColumnSpan="2"
VerticalAlignment="Stretch">
<TabControl.Background>
<ImageBrush ImageSource="/SystemHealthAndDashboard;component/Images/innerBackground.png"/>
</TabControl.Background>
<TabControl.ItemTemplate>
<DataTemplate >
<TextBlock Grid.Column="0" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
DataTemplateSelector:
public class MainTabViewDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
switch ((item as TabInfoEntity).TabIndex)
{
case 1:
{
return element.FindResource("Dashboard") as DataTemplate;
}
case 2:
{
return element.FindResource("SystemHealth") as DataTemplate;
}
}
return null;
}
}
TabInfoEntity类(此类型的对象列表是TabControl的itemsource):
公共类TabInfoEntity { public TabInfoEntity() {
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int tabindex;
public int TabIndex
{
get { return tabindex; }
set { tabindex = value; }
}
}