私は、WPFアプリケーションのチューナーカードからTVを再生するプロジェクトに取り組んでいます。最近、私はWPF MediaKitで動作するようにテレビの再生機能を書き直していました(以前はWindowsFormsHostとWinFormsコントロールをDirectShowのレンダリングターゲットとして使用していたため、通常の空きスペースの問題が発生しました)。テンプレート外のボタンのCommandTargetとしてDataTemplateのコントロールを設定する
ソフトウェアは、アナログとデジタルテレビの両方を果たしており、それらは異なる方法で処理されているように、私はそれぞれのMediaKitクラスMediaPlayerBaseとMediaElementBaseから延びる、(DigitalTvPlayer
、DigitalTvElement
、AnalogTvPlayer
、AnalogTvElement
)の両方のためのPlayer
とMediaElement
を作成しました。
これらのコントロールはすべて動作していますが、チャンネルの一覧(アナログとデジタルが混在している)を含むことができる単一の「TVプレーヤーウィンドウ」を用意し、適切なプレーヤー。次のウィンドウ本体と
<Window.Resources>
<DataTemplate DataType="{x:Type Channels:AnalogChannel}">
<Controls:AnalogTvGraphFileElement
AnalogSpecificData="..."
Channel="{Binding}" />
</DataTemplate>
<DataTemplate DataType="{x:Type Channels:DigitalChannel}">
<Controls:DigitalTvElement
DigitalSpecificData="..."
Channel="{Binding}" />
</DataTemplate>
</Window.Resources>
:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ContentPresenter
x:Name="TvPresenter"
VerticalAlignment="Stretch"
HorizontalAlignment="Center"
Content="{Binding ElementName=TvChannels, Path=SelectedItem}" />
<ListBox Grid.Column="1" x:Name="TvChannels" ItemsSource="{Binding Channels}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
が、これを行うことで
私の最初の試みは、選択したチャンネルに結合さContentPresenter
、各チャネルタイプのための特定のDataTemplate
を使用して関与しましたこのアプローチは「うまくいく」(テレビの演奏、それはアナログとデジタルの間で自動的に切り替わる)、TvElementsを直接制御する能力を失う。例えば、MediaCommands.Play
、私はContentPresenter
またはそのバインドChannel
オブジェクトへの参照のみを持っています。
理想的には、私は(それはおそらくDataTemplate
外となります)Button
のCommandTarget
としてこれらTvPlayer
秒のいずれかを設定できるようにしたいと思います。しかし、私はそのことをどうやってやっていくのかについてはわかりません(それは良いアイデアでもありません)。DataTemplate
で特定のコントロールを探しているとハックしてエラーが発生しやすくなります。
私は何かが不足していると感じたり、間違ったやり方をしているように感じます。プレイヤーにコマンドを実行する能力を失うことなく、チャンネルを扱う一般的な(できれば宣言的な)手段をどのように達成できるかについて、アドバイスや提案がありますか?
ありがとうございました。私はEventHandlerをDataTemplatesに設定でき、Loadedイベントは考慮していませんでした。私はこれが必要に応じて動作すると思います! – jeffora
問題はありません。うれしいです! – Arcturus