0

Ok、

ですから、境界線が(時には大量に)拡大縮小されて翻訳されている状況があります。境界線の内側にはグリッドがあり、グリッドの内側には2つの画像があります。1つは写真で境界線のサイズに引き伸ばされたもので、もう1つはアイコンにするつもりです。これは下部の固定サイズである必要があります。左隅。

問題は、スケーリングがアイコンに与える影響を削除したいということです。これは、アイコンに固定サイズを指定し、そのサイズのままにしておきたいためですが、残念ながら、境界線からのスケーリングが境界線の子を伝播し、それらにも影響を与えています。

だから私はこのピクセルスナップアーティカルに似た添付プロパティを使用してみました(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);
    }

私はおそらくこれについて完全に間違った方法で考えているのではないかと思っています。賢明な解決策は、スケーリングの必要性を取り除くためにリファクタリングすることだと思いますが、時間があるまで使用できるより迅速な解決策の直後だったと思います。

どんな助けでも大歓迎です!:)

ありがとう!

アンディ。

4

1 に答える 1

0

非常に複雑に見えるスケーリング(固定アスペクト比を想定)のみを行っている場合は、写真をViewBoxコンテナに配置してみませんか?ビューボックス(写真を含む)とアイコン(この順序で)を親グリッドに配置します。

  • 配置とマージンの設定を使用して、左下を基準にしてアイコンを作成します
  • ビューボックスのサイズを変更して、画像を拡大縮小します。

グリッドは、ビューボックスのサイズに合わせて縮小されます。アイコンは、左下のグリッドを基準にして残ります。

ピクセルスナップ動作はViewBoxで機能するはずです。

特定の例が必要な場合は、から動作するXamlの一部を提供してください

于 2010-09-21T11:15:42.797 に答える