StackPanelは、項目を垂直方向に積み重ねることを考えたときにすぐに頭に浮かびます。残念ながら、PrismはStackPanelをそのままの領域としてサポートしていません。幸いにも、この問題を解決するRegionAdapterを作成することができます。
Public Class StackPanelRegionAdapter
Inherits RegionAdapterBase(Of StackPanel)
Public Sub New(ByVal behaviorFactory As IRegionBehaviorFactory)
MyBase.New(behaviorFactory)
End Sub
Protected Overrides Sub Adapt(ByVal region As IRegion, ByVal regionTarget As StackPanel)
AddHandler region.Views.CollectionChanged, Sub(sender As Object, e As NotifyCollectionChangedEventArgs)
If e.Action = NotifyCollectionChangedAction.Add Then
For Each element As FrameworkElement In e.NewItems
regionTarget.Children.Add(element)
Next
Else
If e.Action = NotifyCollectionChangedAction.Remove Then
For Each element In e.OldItems
If regionTarget.Children.Contains(element) Then
regionTarget.Children.Remove(element)
End If
Next
End If
End Sub
End Sub
Protected Overrides Function CreateRegion() As Microsoft.Practices.Prism.Regions.IRegion
Return New AllActiveRegion
End Function
End Class
そこから、あなたは自分のブートストラップにConfigureRegionAdapterMappingsオーバーライドにマッピングを追加する必要があります。
Protected Overrides Function ConfigureRegionAdapterMappings() As Microsoft.Practices.Prism.Regions.RegionAdapterMappings
Dim mappings = MyBase.ConfigureRegionAdapterMappings()
mappings.RegisterMapping(GetType(Grid), Container.Resolve(Of PrismExtensions.GridRegionAdapter))
mappings.RegisterMapping(GetType(StackPanel), Container.Resolve(Of PrismExtensions.StackPanelRegionAdapter))
Return mappings
End Function
編集:元々コードを取得したジョンパパリンクを見つけました。 (C#で使用している場合)Fill My Prism Region, Please
はあなたを持っている:それはあなたカント書き込みを把握するために私に時間を要した
StackPanelを領域として使用しようとしましたか? – pdiddy