好的,刪除子元素的渲染變換
所以我有一種情況,邊界被縮放(有時是大量)並翻譯。在邊框內部是一個網格,網格內部是兩個圖像,一個是照片,並且被拉伸到邊框的大小,另一個,我打算成爲一個圖標,它的底部需要是一個固定的大小左手邊角落。
問題是,我想刪除縮放對圖標的影響。這是因爲我給這個圖標設置了一個固定的大小,並希望它保持這個大小,但不幸的是,邊界的縮放會沿着邊界的孩子傳播並影響他們。
所以我使用附加屬性,與此類似像素貼緊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