1

私は添付プロパティを扱っていて、興味深い理論上の問題を思いつきました。XAML を使用して添付プロパティを設定する場合は、次の形式を使用することを知っています。

<control ownerClass.propertyName="some value"/>

私の質問は、「ownerClass」からクラスを派生させるとどうなるかということです。たとえば、次のクラスを定義するとします。

class MyGrid : Grid {
}

次のようにXAMLで設定しようとしました

<MyGrid>
    <Button MyGrid.Row = "0">Bla Bla</Button>
</MyGrid>

しかし、インテリセンスは私を許しませんでした。添付プロパティで適切な名前空間を使用すると、機能しました。

また、これを行うことができました:

<MyGrid>
    <Button Grid.Row = "0">Bla Bla</Button>
</MyGrid>

もちろん、 Row添付プロパティは Grid クラスの静的メンバーであり、Gridクラスによって定義されているため、これは理にかなっています。ここでの唯一の問題は、新しいクラスのユーザーが、それが Grid から派生したものであり、この特定のプロパティが先祖によって定義されたものであることを知ることです。私には、これは私のクラスのユーザーに公開したくない実装の詳細のようです。

この添付プロパティが実際にスーパークラスによって定義されたという事実を隠すために WPF を取得する方法はありますか?

ありがとう、

コビ

4

1 に答える 1

2

問題が見えているかどうかわかりません。私はこれを試してみましたが、うまくいきます。また、インテリジェンスが機能していました。使用している .NET のバージョンと VisualStudio のバージョンは? 私は.NET 4.0とVS2010でこれを試しました

<local:MyGrid>
    <local:MyGrid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </local:MyGrid.ColumnDefinitions>
    <Button local:MyGrid.Column="1" Content="Button1"/>
    <Button local:MyGrid.Column="0" Content="Button2"/>
</local:MyGrid>

public class MyGrid : Grid
{
    public MyGrid() { }
}
于 2011-01-02T22:15:30.210 に答える