我可以将StretchDirection添加到VisualBrush吗?

nik*_*mus 9 c# wpf

是否可以将属性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)

Jon*_*gon 2

VisualBrush获取 的所有内容VisualBrush.Visual并将其用作Brush。因此,想象一下您使用的Stretch="None"尺寸Image为 10000x10000,并将其设置VisualBrushBackground您的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,paddingTileMode在这里进行一些小的调整。可能的话,为您添加一个Container(如)并为 this定义and 。GridMediaElementWidthHeightContainer

太长;博士; 您询问 Stretch 是否可以在 VisualBrush 上使用 - 它可以使用,并且已正确考虑,如您的示例代码中所示。问题在于VisualBrush.Visual. 在那里使用这个属性(几乎)没有意义,因为所有渲染的都VisualBrush.Visual用作画笔。我想说,你拉伸得越多,用作画笔的就越多:)