0
[Category("SomeCat")]
[Description("Gets or sets how items are displayed in the ShellListView control.")]
[DefaultValue(View.Details)]
new public View View
{
    get { return base.View; }
    set
    {
        System.Diagnostics.Debug.WriteLine("View");

        if (value != View.LargeIcon)
        {
            //Reset these values because they can only be true if LargeIcon is set.
            ShowExtraLargeIcons = false;
        }

        base.View = value;
    }
}    

private bool m_ShowExtraLargeIcons;

[Category("Appearance")]
[DefaultValue(false)]
public bool ShowExtraLargeIcons
{
    get { return m_ShowExtraLargeIcons; }
    set
    {
        if (m_ShowExtraLargeIcons == value) 
            return;

        System.Diagnostics.Debug.WriteLine("Extra");

        m_ShowExtraLargeIcons = value;

        if (m_ShowExtraLargeIcons)
        // Always set view to LargeIcon if ShowExtraLargeIcons is enabled
            View = View.LargeIcon;
    }
}

私の問題: View を (VS 2010 のプロパティ マネージャーを介して) LargeIcons 以外に設定すると、ShowExtraLargeIcons プロパティは False に設定されていても True のままです。

ShowExtraLargeIcons を True に設定すると、View プロパティは予想どおり LargeIcons に設定されます。

役立つかもしれない何か:ShowExtraLargeIconsを設定した後のデバッグメッセージ(「View」と「Extra」)は表示されますが、Viewを設定した後は表示されません(両方とも設計時に設定されます)。

4

2 に答える 2

2

これは依存関係プロパティとは関係ありません。単にプロパティ ブラウザーの動作です。

クラスメンバーで new 修飾子を使用する場合、「オーバーライド」は作成されません。ListView.Viewは仮想プロパティではありません。MyListView.View同じ署名と名前を持つ完全に新しいプロパティ ( ) を作成しています。

プロパティ ブラウザは、プロパティを列挙し、記述子を使用してそれらを操作します。2 つの完全に異なるプロパティが表示され、両方を表示するか、いずれかを任意に選択します。

于 2011-01-24T16:49:29.243 に答える
0
new public View

トレースが表示されない場合、親オブジェクトを編集しているように見えます。そして、その paranet オブジェクトは、m_ShowExtraLargeIcons 変数に影響を与えることなく編集されます。

于 2011-01-24T16:51:32.860 に答える