【问题标题】:Silverlight Custom effect, get parentSilverlight 自定义效果,获取父级
【发布时间】:2012-10-11 20:35:05
【问题描述】:

我正在尝试通过从Effect 继承来创建自定义效果。

<Ellipse Width="75" Height="75" Stroke="LightGray">
    <Ellipse.Effect>
        <local:GlowEffect GlowRadius="10"/>
    </Ellipse.Effect>
</Ellipse>

问题出在我的效果代码中。我无法获得效果属性的父级,在这种情况下,就是那个椭圆。您不能使用VisualTreeHelper,因为在构造 GlowEffect 时(在其构造函数中),椭圆不会加载到可视化树中。我还没有找到解决这个问题的方法,或者我只是用错误的方式解决这个问题。

【问题讨论】:

  • 您可以尝试将x:Name=""添加到父级,然后使用ElementName绑定
  • 那行不通,因为名称可能因用户而异。这样做的目的是构建一个通用的效果器,而不必依赖于虚构的约定。必须有一套方法来做到这一点,微软是如何用 BlurEffect 类做到的......?

标签: c# silverlight shader effect visualtreehelper


【解决方案1】:

所有“魔法”都在着色器文件(.fx 扩展名)中实现,但不在 C# 效果类中。 您可以在着色器中访问所有像素及其颜色,并且可以根据需要组合相邻像素的颜色。

sampler2D input : register(S0);
float4 main(float2 uv : TEXCOORD) : COLOR
{
   // access to current pixel
   float4 color1 = tex2D(input, uv);

   // access to neighbour pixel
   float2 offset = (some value);
   float4 color2 = tex2D(input, uv + offset);

   return (any formula based on color1 and color2);
}

如果您打算创建自定义效果,我建议您阅读this book

您的问题的答案是 - 您不需要访问 Parent 元素。

【讨论】:

  • 这很好,但是,我不打算制作 ShaderEffect。 Silverlight for Windows Phone 不支持 ShaderEffects。和 BlurEffect 一样,ShaderEffect 是 Effect 的子类,我想做另一种自定义类型的效果,比如 BlurEffect。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多