Frage

Ok,

Also ich habe eine Situation, wo eine Grenze skaliert wird (manchmal durch eine große Menge) und übersetzt. Innerhalb der Grenze ein Gitter ist, und im Innern des Gitters sind zwei Bilder, ist man ein Foto und ist auf die Größe der Grenze gestreckt, und die andere, beabsichtige ich, ein Symbol zu sein, die eine feste Größe im Boden sein muss linke Ecke.

Das Problem ist, dass ich die Wirkung Skalierung wird mit auf das Symbol entfernen möchten. Das ist, weil ich das Symbol einer festen Größe gegeben haben und möchten, dass Größe bleiben, aber leider ist die Skalierung von der Grenze ausbreitet unten die Kinder der Grenze und bewirken sie auch.

So habe ich versucht, eine angeschlossene Eigenschaft verwenden, ähnlich wie diese Pixel Schnappen artical ( http://blogs.msdn.com/b/devdave/archive/2008/06/ 22 / mit-ein-Attached-DependencyProperty implementierende-Pixel-Schnappen-as-ein-Attached-behavior.aspx ), aber es scheint nicht, einen Unterschied zu machen. Wenn steped durch, die die Elemente immer in LayoutUpdate modifiziert werden scheinen, um die Identitätsmatrix zu haben, für die ohnehin verwandeln rendern, bevor ich es eingestellt haben.

Ich glaube, ich bin miss-interperating wie Transformationen auf Kinder angewendet werden render vielleicht?

Wie auch immer, ist es das, was ich habe (Auch das weiß ich (wenn es funktioniert) würde zu Übersetzung entfernen, was nicht ist, was ich will!):

    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);
    }

Ich denke, ich bin wahrscheinlich darüber nachgedacht vielleicht in der völlig falschen Weg. Ich denke, die sinnvolle Lösung zu refactor würde die Notwendigkeit für die Skalierung zu entfernen, aber ich glaube, ich war gerade nach einer schnelleren Lösung, die ich verwenden kann, bis ich Zeit habe.

Jede Hilfe ist willkommen! :)

Danke!

Andy.

War es hilfreich?

Lösung

Wenn Sie nur die Skalierung (I festes Seitenverhältnis übernehmen), die übermäßig kompliziert erscheint, warum nicht das Foto in einem Behälter ViewBox platzieren? Legen Sie die ViewBox (mit dem Foto) und das Symbol (in dieser Reihenfolge) in einem übergeordneten Netz.

  • Machen Sie das Symbol in Bezug auf den Boden Verwendung Ausrichtung und linken Rand Einstellungen
  • Resize das Sichtgerät Ihr Bild zu skalieren.

Das Gitter wird schrumpfen die Sichtbox Größe passen. Das Symbol wird in das Netz unten links im Verhältnis bleiben.

Ihr Pixel Verhalten schnappen sollte auf einer ViewBox arbeiten.

Wenn Sie ein konkretes Beispiel benötigen, können Sie einige Ihrer XAML Arbeit von liefern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top