0

私はPrism 5.0 の対話機能が気に入っていますが、作成したUserControls内部Panelsで開くことができます。Windowしたがって、Window別の内部に配置できないため、ルート要素としてWindow持つビューを渡すことはできません。Window

問題は、作成したUserControl内部にmy を配置すると、またはまたはオプションを選択できないため、ユーザーインターフェイスがひどいものになることです。WindowWindowMinWidthMinHeightResizeMode="NoResize"

のプロパティを制御して、Window必要に応じてカスタマイズできる方法はありますか?

PS: Microsoft のような大規模で重要な企業が、そのような不足しているベスト プラクティス ライブラリをリリースできることに驚かされます。


リクエストに応じて、コード例を次に示します。

Prism で新しいビューを開くには、これを現在のビューに追加する必要があります (新しいビューのWindow作成を呼び出すビュー)。WindowViewModel

    <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 の子として配置されます新しい。WindowWindowItemSelectionViewWindowsWindow ItemSelectionViewWindow

これがどのように機能するかの詳細については、私が投稿したリンクにアクセスしてください。


今のところ、コードビハインドを使用してウィンドウを微調整しています。これ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;                
    }
}
4

1 に答える 1

0

かなり簡単な解決策があります。

PopupWindowActionはラッパー ウィンドウをクラスのインスタンスとして作成するため、 app.xamlの型にWindow既定のスタイルを適用できます。Window

<Application.Resources>
    <Style TargetType="{x:Type Rectangle}"/>
    <Style TargetType="{x:Type Window}">
        <Setter Property="Width" Value="500"/>
        <Setter Property="ResizeMode" Value="NoResize"/>
        <Setter Property="ShowInTaskbar" Value="False"/>
    </Style>
</Application.Resources>
于 2015-06-19T20:36:27.903 に答える