Wpf 为什么在VisualBrush内设置拉伸属性时不应用椭圆填充?

Wpf 为什么在VisualBrush内设置拉伸属性时不应用椭圆填充?,wpf,ellipse,visualbrush,radialgradientbrush,Wpf,Ellipse,Visualbrush,Radialgradientbrush,我正在处理一个自定义控件,我有一个带有Visual属性的VisualBrush: <VisualBrush.Visual> <Grid> <Ellipse Stretch="Uniform" Stroke="OrangeRed" StrokeThickness="1"> <Ellipse.Fill> <RadialGradientBrush GradientOri

我正在处理一个自定义控件,我有一个带有
Visual
属性的
VisualBrush

<VisualBrush.Visual>
    <Grid>
        <Ellipse Stretch="Uniform" Stroke="OrangeRed" StrokeThickness="1">
            <Ellipse.Fill>
                <RadialGradientBrush GradientOrigin="0.5,0.5">
                    <GradientStop Color="Yellow" Offset="0" />
                    <GradientStop Color="Orange" Offset="1" />
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <Ellipse  Stretch="Uniform">
            <Ellipse.Fill>
                <RadialGradientBrush GradientOrigin="0.5, 0.05" RadiusX=".7" RadiusY=".5" >
                    <GradientStop Color="White" Offset=".10" />
                    <GradientStop Color="Transparent" Offset="1" />
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
    </Grid>
</VisualBrush.Visual>

Stretch
属性设置为
Uniform
而不是使用我创建的
RadialGradientBrush
时,它会以某种方式使用
Stroke
颜色创建一个
SolidColorBrush
。但是,当我显式设置
椭圆
宽度
高度
属性而不是使用
拉伸
属性时,我得到了预期的渐变

有什么奇怪的想法吗


编辑:我刚刚观察到,当我将
椭圆
括在
视图框
中时,会发生这种行为。我不确定在上面的示例中,您使用
视图框
的目的是什么,但是我认为您看到的一些奇怪行为是由于没有为
VisualBrush
设置根元素的大小

在for
VisualBrush.Visual
中,有一段提到了大小(增加了重点):

当您为VisualBrush定义新的视觉时,该视觉是 UIElement(如面板或控件),布局系统在 当AutoLayoutContent属性 设置为true。但是,根元素本质上是隔离的 来自系统的其他部分;样式、故事板和外部布局 由应用笔刷的父级指定,无法渗透该区域 边界。因此,您应该显式地指定 根元素,因为它唯一的父元素是VisualBrush和 因此,它无法自动调整自身大小以适应所需的区域 已绘制。有关Windows演示文稿中布局的详细信息 基金会(WPF),请参阅版面。

如果我运行上面的代码,我的椭圆将完全用笔划颜色填充,这可能是因为布局是用椭圆的最小值计算的,因此笔划足够大,可以覆盖椭圆内容/填充(然后将其放大到填充视口,使笔划看起来像是填充颜色)


如果我给根元素一些任意的大小,布局将以此为基础,
我开始看到笔划和填充颜色,并用相对大小进行渲染。

Aaaah,我看到了。这是有道理的。感谢您的解释。Good stuff=D作为一个小插曲,我尝试将
椭圆
包装在
视图框
中,并确实开始看到一些奇怪的结果,我认为有一些好的选项可以玩,这取决于
视图框
应该做什么。祝你好运