私はPrism 5.0 の対話機能が気に入っていますが、作成したUserControls
内部Panels
で開くことができます。Window
したがって、Window
別の内部に配置できないため、ルート要素としてWindow
持つビューを渡すことはできません。Window
問題は、作成したUserControl
内部にmy を配置すると、またはまたはオプションを選択できないため、ユーザーインターフェイスがひどいものになることです。Window
Window
MinWidth
MinHeight
ResizeMode="NoResize"
のプロパティを制御して、Window
必要に応じてカスタマイズできる方法はありますか?
PS: Microsoft のような大規模で重要な企業が、そのような不足しているベスト プラクティス ライブラリをリリースできることに驚かされます。
リクエストに応じて、コード例を次に示します。
Prism で新しいビューを開くには、これを現在のビューに追加する必要があります (新しいビューのWindow
作成を呼び出すビュー)。Window
ViewModel
<prism:InteractionRequestTrigger SourceObject="{Binding ItemSelectionRequest, Mode=OneWay}">
<!-- This PopupWindowAction has a custom view defined. When this action is executed the view will be shown inside a new window -->
<!-- Take into account that the view and its view model are created only once and will be reused each time the action is executed -->
<prism:PopupWindowAction>
<prism:PopupWindowAction.WindowContent>
<views:ItemSelectionView />
</prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
これItemSelectionView
を a から aUserControl
に変更Window
すると、次の例外が発生します。
基本的に Prism は、新しいものと新しいものを作成し、一方を他方の内側に配置しようとWindow
するときに a の内側に配置しようとするため、常にルートであると想定されますが、この場合は a の子として配置されます新しい。Window
Window
ItemSelectionView
Windows
Window
ItemSelectionView
Window
これがどのように機能するかの詳細については、私が投稿したリンクにアクセスしてください。
今のところ、コードビハインドを使用してウィンドウを微調整しています。これUserControl
がウィンドウのルートであるかどうかを確認し、その場合にのみ設定をチークしWindow's
ます (これは理想的ではありませんが、それでも MVVM の違反ではありません)。
private void OnLoaded(object sender, System.Windows.RoutedEventArgs e)
{
Window parentWindow = Window.GetWindow(this);
if (parentWindow != null && parentWindow.Content == this)
{
parentWindow.ResizeMode = ResizeMode.NoResize;
parentWindow.SizeToContent = SizeToContent.Height;
parentWindow.MinHeight = this.MinHeight;
parentWindow.MinWidth = this.MinWidth;
}
}