0

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にあります。誰かがこれを修正する方法を知っていますか?ありがとう

4

2 に答える 2

0

通常のTabConrolにはcontentPresenterが1つしかないため、前のコンテンツをディカードすると思います。もしそうなら、これはうまくいくはずです: TabControlがその子を再作成するのを止めてください

于 2013-03-13T11:47:42.093 に答える
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です):

public class 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; }
    }
}
于 2013-05-01T09:03:29.437 に答える