是否可以将属性StretchDirection添加到VisualBrush?我的VisualBrush包含一个媒体元素,media元素具有此属性,但不包含VisualBrush.当我将StretchDirection属性应用于此MediaElement时,它将被忽略.我猜是因为VisualBrush覆盖了它的属性.
<VisualBrush x:Key="vb_zoneOneAdvertisement" TileMode="None" Stretch="Uniform" AlignmentX="Center" AlignmentY="Center" >
<VisualBrush.Visual>
<MediaElement />
</VisualBrush.Visual>
</VisualBrush>
Run Code Online (Sandbox Code Playgroud)
VisualBrush获取 的所有内容VisualBrush.Visual并将其用作Brush。因此,想象一下您使用的Stretch="None"尺寸Image为 10000x10000,并将其设置VisualBrush为Background您的Window. 就像这段代码:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ListViewBasicSample" Height="500" Width="500">
<Grid>
<Grid.Background>
<VisualBrush TileMode="None" AlignmentX="Center" Stretch="Fill" AlignmentY="Center" >
<VisualBrush.Visual>
<Grid Background="red">
<Image Source="wp2444179.jpg" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="None" Margin="100" Height="10000" />
</Grid>
</VisualBrush.Visual>
</VisualBrush>
</Grid.Background>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
您可能期望只渲染该图像的一小部分,但事实并非如此,因为 的所有内容都VisualBrush.Visual被视为VisualBrush. 结果如下:
在这种情况下,没有Stretch财产的地方。您可以使用margin,padding或TileMode在这里进行一些小的调整。可能的话,为您添加一个Container(如)并为 this定义and 。GridMediaElementWidthHeightContainer
太长;博士;
您询问 Stretch 是否可以在 VisualBrush 上使用 - 它可以使用,并且已正确考虑,如您的示例代码中所示。问题在于VisualBrush.Visual. 在那里使用这个属性(几乎)没有意义,因为所有渲染的都VisualBrush.Visual用作画笔。我想说,你拉伸得越多,用作画笔的就越多:)