- PR -

Web複合コントロールでのStyleプロパティの実装について

1
投稿者投稿内容
ダン
会議室デビュー日: 2006/12/22
投稿数: 5
投稿日時: 2006-12-22 14:40
ダンと申します。
よろしくお願いします。

「Web複合コントロール」を開発しております。

Styleプロパティを実装したく、ネットで検索したのですが
参考になる資料等に辿り着けませんでしたので質問させていただきます。

System.Web.UI.Controlを継承したカスタムコントロールの
作成の場合Styleプロパティを自前で実装しなければならないようですが、
string型のStyleプロパティを追加してやると、そのコントロールの生成時に
aspxファイルに設定されている[style]の内容を読み込んで来るという所
までは辿り着けました。

更に、この時読み込んだ内容はaspxの[style]の内容を文字列として
全部一度に取得している事がわかりました。

この内容を各属性毎に分解して使うことは可能ですが、
他のWebContlorの様にコレクションのプロパティとして
「読み込み/保存」をする方法がわかりません。

最初にstring型で読み込み、後にコレクションのプロパティで
管理すると言うようなことをどのように実現しているのでしょうか?

参考資料等ご存知の方がいらっしゃいましたら、
ご教示いただきたいと思います。

開発環境は、VS.NET2003で、C#を使用しております。

よろしくお願いいたします。
dotnetmemo
常連さん
会議室デビュー日: 2006/04/29
投稿数: 24
投稿日時: 2006-12-24 00:18
VBでしかもVS2005ですが、参考までにStyle型のプロパティの実装例です。
#たぶん、VS2003でも同じだと思いますが...

Private _titleyStyle As Style

<PersistenceMode(PersistenceMode.InnerProperty), _
DesignerSerializationVisibility(DesignerSerializationVisibility.Content), _
NotifyParentProperty(True), _
DefaultValue("")> _
Public ReadOnly Property TitleStyle() As Style
Get
If Me._titleyStyle Is Nothing Then
Me._titleyStyle = New Style
If IsTrackingViewState Then
DirectCast(Me._titleyStyle, IStateManager).TrackViewState()
End If
End If
Return Me._titleyStyle
End Get
End Property

Protected Overrides Sub TrackViewState()
MyBase.TrackViewState()
If Not Me._titleyStyle Is Nothing Then
DirectCast(Me._titleyStyle, IStateManager).TrackViewState()
End If
End Sub

Protected Overrides Sub LoadViewState(ByVal savedState As Object)
Dim data() As Object = DirectCast(savedState, Object())
MyBase.LoadViewState(data(0))
If Not data(1) Is Nothing Then
DirectCast(Me._titleyStyle, IStateManager).LoadViewState(data(1))
End If
End Sub

Protected Overrides Function SaveViewState() As Object
Dim styleObj As Object = Nothing
If Not Me._titleyStyle Is Nothing Then
styleObj = DirectCast(Me._titleyStyle, IStateManager).SaveViewState()
End If
Return New Object() {MyBase.SaveViewState(), styleObj}
End Function
ダン
会議室デビュー日: 2006/12/22
投稿数: 5
投稿日時: 2006-12-25 13:25
dotnetmemoさん、こんにちは!
そして、質問に対する書き込みありがとうございました。

自分なりに解析させていただいたのですが、
これは「Style型」のプロパティの永続化に
関する実装例ではないでしょうか?

自分でも「読み込み/保存」と言う言葉を使った
事に対して、誤解を招かないかと心配はしていたのです。

疑問に思っていたのは、
Web複合コントロールの「Style」プロパティ自体の
実装方法なのです。

作成した「カスタムコントロール」に
ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")
と言う属性を付与すると、aspx側では[style]タグに位置情報などの
値が設定されます。

この為カスタムコントロールをそのまま使おうとすると
「Styelプロパティがありません」と言うエラーになってしまいます。
無理やり、string型にて[Styleプロパティ]を実装すると、
[style]タグの内容を全部読み込むのですが、
その後、通常のコントロールの様に
Style["LEFT"]と言った様な使い方が出来ません。

この辺りの実装方法を知りたかったのです。

私の表現が至らなかったせいで、
せっかく返答いただいたdotnetmemoさんに対しては
大変申し訳ないと思っております。

この辺りに付いての情報をお持ちの方が
いらっしゃいましたら、ご教示いただきたいと思います。

よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)