好的,
所以我有一种情况,边界被缩放(有时被大量)和翻译。边框里面是一个网格,网格里面是两张图片,一张是照片,被拉伸到边框的大小,另外一张,我打算做一个图标,需要在底部固定大小左手角。
问题是,我想删除图标上的效果缩放。这是因为我给了图标一个固定的大小,并希望它保持那个大小,但不幸的是,从边框的缩放正在向下传播到边框的子元素并影响它们。
所以我尝试使用附加属性,类似于这个像素捕捉文章(http://blogs.msdn.com/b/devdave/archive/2008/06/22/using-an-attached-dependencyproperty-to-implement -pixel-snapping-as-an-attached-behavior.aspx),但它似乎没有什么区别。单步执行时,在 LayoutUpdate 中修改的元素似乎总是在我设置之前具有渲染转换的单位矩阵。
我想我错过了如何将渲染转换应用于儿童?
无论如何,这就是我所拥有的(另外,我知道这(如果它有效)也会删除翻译,这不是我想要的!):
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);
}
我在想我可能以完全错误的方式思考这个问题。我想明智的解决方案是重构以消除缩放的需要,但我想我只是在寻求一个更快的解决方案,直到我有时间为止。
任何帮助表示赞赏!:)
谢谢!
安迪。