好的,删除子元素的渲染变换
所以我有一种情况,边界被缩放(有时是大量)并翻译。在边框内部是一个网格,网格内部是两个图像,一个是照片,并且被拉伸到边框的大小,另一个,我打算成为一个图标,它的底部需要是一个固定的大小左手边角落。
问题是,我想删除缩放对图标的影响。这是因为我给这个图标设置了一个固定的大小,并希望它保持这个大小,但不幸的是,边界的缩放会沿着边界的孩子传播并影响他们。
所以我使用附加属性,与此类似像素贴紧ARTICAL(http://blogs.msdn.com/b/devdave/archive/2008/06/22/using-an-attached-dependencyproperty-to-implement-pixel-snapping-as-an-attached-behavior.aspx)试过了,但它似乎不有所作为。当我设置它之前,在LayoutUpdate中被修改的元素总是似乎具有用于渲染变换的单位矩阵。
我猜我误interperating如何渲染变换应用于儿童可能?
无论如何,这是我有什么(另外,我知道这(如果它的工作)将消除翻译过,这不是我想要的!):
public static readonly DependencyProperty IsConstantSizeProperty =
DependencyProperty.RegisterAttached(
"ConstantWidth",
typeof(bool),
typeof(ItemsControlEX),
new PropertyMetadata(new PropertyChangedCallback(IsConstantSizeChanged)));
private static List<FrameworkElement> m_constSizeObjects = new List<FrameworkElement>();
private static void IsConstantSizeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
bool isConstantWidth = (bool)args.NewValue;
if (isConstantWidth)
{
FrameworkElement el = (FrameworkElement)obj;
m_constSizeObjects.Add(el);
el.LayoutUpdated += new EventHandler(el_LayoutUpdated);
el.Unloaded += new RoutedEventHandler(el_Unloaded);
}
}
static void el_Unloaded(object sender, RoutedEventArgs e)
{
FrameworkElement el = (FrameworkElement)sender;
el.Unloaded -= new RoutedEventHandler(el_Unloaded);
el.LayoutUpdated -= new EventHandler(el_LayoutUpdated);
m_constSizeObjects.Remove(el);
}
static void el_LayoutUpdated(object sender, EventArgs e)
{
foreach (FrameworkElement el in m_constSizeObjects)
{
MatrixTransform trans = new MatrixTransform();
trans.Matrix = Matrix.Identity;
el.RenderTransform = trans;
}
}
public static void SetIsConstantWidth(UIElement element, Boolean value)
{
element.SetValue(IsConstantSizeProperty, value);
}
public static Boolean GetIsConstantWidth(UIElement element)
{
return (Boolean)element.GetValue(IsConstantSizeProperty);
}
我想我”我可能会用完全错误的方式来思考这个问题。我想合理的解决方案是重构以消除缩放的需求,但我想我只是在我有时间之前可以使用更快的解决方案之后。
任何帮助表示赞赏! :)
谢谢!
Andy。
哇,忘了所有关于ViewBox!它始终是被忽视的简单解决方案!无论哪种方式,我已经删除了需要削减,所以我已经解决了这种方式!比我想象的快! :) 如果您有任何知识/链接,您是否仍然有兴趣更深入地了解如何将转化传播给儿童,只是出于兴趣? – Andy 2010-09-21 11:34:51
@安迪:与真实的3D渲染不同,它有效地从下到上工作。试想每个孩子的控制只是一个位图。然后由父级应用下一个变换。冲洗并重复,直到你到达渲染树的顶部:) – 2010-09-21 11:37:44