VisualBrush

时间:2018-03-21 17:45:56

标签: c# wpf

我有一个包含MediaElement的VisualBrush。这是xaml:

<Rectangle Name="myRectangle" Grid.Row="1">
   <Rectangle.Fill>
      <VisualBrush x:Name="myVisuaBrush" Stretch="Uniform">
         <VisualBrush.Visual>
            <MediaElement Name="me_zoneOneAdvertisement" />
         </VisualBrush.Visual>
      </VisualBrush>
   </Rectangle.Fill>
</Rectangle>

使用下面的c#代码播放视频:

this.me_zoneOneAdvertisement.Source = new Uri("C:\\a.mp4");
this.me_zoneOneAdvertisement.LoadedBehavior = MediaState.Manual;
this.me_zoneOneAdvertisement.Play();

ContentWindow contentWindow = new ContentWindow();

然而,使用MediaBrush的重点是扩展MediaPlayer的功能而不浪费资源。当我尝试打开一个新窗口,然后在该窗口中填充一个元素时,我在当前窗口中看不到它曾经工作过的东西,并且打开的新窗口也没有任何内容。这是打破一切的代码。 dislay1是一个矩形,我试图用视觉画笔填充它。为什么这会阻止视频在原始窗口中播放,为什么它不能在我刚创建的新窗口中起作用?

contentWindow.display1.Fill = this.myVisuaBrush;

P.S。 - 如果我将媒体画布声明为页面级资源,我可以使用它。尽管如此,我不明白为什么我不能使用xaml主体中的媒体画笔来填充另一个窗口中的元素。

1 个答案:

答案 0 :(得分:1)

VisualBrush 的MSDN文档说明如下:

  

但是,根UIElement基本上与系统的其他部分隔离;样式,故事板和外部布局无法渗透到这个边界。因此,您应该明确指定根UIElement的大小,因为它的唯一父级是VisualBrush和因此它不能自动调整自己的大小到正在绘制的区域。有关Windows Presentation Foundation(WPF)中的布局的详细信息,请参阅布局。

这意味着画笔中的Visual与布局过程隔离。我认为如果您指定可视内联,这会导致您的问题。

我希望这会有所帮助。