在电脑上调用海康、大华等录像机的SDK播放接口的时候,需要传入用于视频图像绘制的控件的句柄。但是WPF中的普通控件是没有单独的句柄的。因此,如果需要在WPF中播放录像机的视频(视频预览或者录像回放),其解决思路之一便是在wpf的窗口中嵌入一个winform的Panel控件,然后传入Panel控件的句柄。
为了便于复用,我将其封装成了一个WPF的无外观控件(CustomControl)。
一 控件整体结构
如上图所示,整个控件的结构比较简单,一个用于控件逻辑控制的类VideoPlayer,一个用户标识视频播放状态的枚举PlayStatus,一个默认的控件外观文件VideoPlayer.xaml。
二 默认外观(默认模板)
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MediaPlayers"
xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration">
<Style TargetType="{x:Type local:VideoPlayer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:VideoPlayer}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid >
<wfi:WindowsFormsHost x:Name="PART_PanelContainer"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button x:Name="PART_BTNFastForward" Grid.Column="1" Content="快退" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<