2011-01-02 6 views
1

私はアタッチされたプロパティで作業していて興味深い理論的な質問がありました。私はXAMLを介して結合しているプロパティを設定したい場合は、私はフォーマットを使用することを知っている:サブクラスがアタッチするアタッチされたプロパティの接頭辞は何ですか

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

私の質問は、私が「ownerClass」からクラスを派生するとどうなるか、です。例えば、私は以下のクラスを定義した場合、:

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

を次のように

class MyGrid : Grid { 
} 

はXAMLを通してそれを設定しようとしましたが、インテリセンスは私を聞かせていませんでした。添付されたプロパティで適切な名前空間を使用すると、それは機能しました。

はまた、それは私がこれを行うには許可:

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

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

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

おかげで、

コビ

+0

でこれを試してみました(そのためのthnx、Meleak)元の問題を解決しているが、実装の詳細を「非表示」にする方法がある場合、私はまだ疑問に思ってユーザーがスーパークラス接頭辞を使用して接続プロパティにアクセスすることを許可しません。将来、Gridクラスをスーパークラスとして使用しないように実装を変更する場合でも、同じように動作するはずですので、ユーザーがこのクラスが継承されたという事実にさらされないようにしたいと考えています。グリッドクラス。 –

+0

IntellisenceからGrid.Rowを非表示にしたいのですか、またはGrid.Rowの機能を無効にしたいのですか? –

答えて

2

私は問題を見わかりません。私はこれを試して、それは動作します。また、インテリジェンスが働いていた。使用している.NETのバージョンとVisualStudioのバージョンは何ですか?私は、Meleakを明確にするために、.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() { } 
} 
+0

あなたは実際に正しいです。それは、プロパティ自体に適切な名前空間を使用していないことが判明しました。 –

+0

@ Kobi Hari:申し訳ありません:)あなたはそれを働いてうれしい! –

+0

ありがとう:-)。しかし、私はまだ "Grid.Row"の可能性を隠す方法を探しています。私は派生クラスを他のクラスと同じように使いたいので、2つの異なる方法でアクセスする添付プロパティが好きではないでしょう。自分で完全に実装するのではなく、Gridからクラスを派生させるからです。あなたはそれを行う方法を知っていますか? –

関連する問題