无需新窗口即可加载XAML内容

时间:2012-06-26 19:23:49

标签: wpf xaml window

我正在尝试找到一种方法来更改WPF中窗口的内容,而无需加载新窗口。在大多数情况下,以下工作正常:

dim x as new window 
x.show()
me.close 

有没有办法做类似以下的事情?

dim x as new window 
me.content = x 

4 个答案:

答案 0 :(得分:1)

这个答案有点延迟。我遇到了一个需要更改窗口全部或部分内容的情况,正如wpf-it所建议的那样 - 我使用了ContentControl。

我使用的窗口正在与条形码扫描仪一起使用。我们有一些项目类型可以使用一组不同的选项和显示进行扫描。由于我们的应用程序是用MVVM模式编写的(或至少...... MVVM-esque;))我创建了一些XAML:

<ContentControl Grid.Row="2" Content="{Binding itemOptions}" /> 

然后绑定到此属性:

    Public ReadOnly Property itemOptions As UserControl
        Get
            Select Case SearchResult.GetType()
                ' Part
                Case GetType(partHeaderModel)
                    Try
                        Return New partOptions
                    Catch ex As Exception
                        ' Fail
                        ' Return New noResults
                    End Try

                    ' Bin
                Case GetType(binModel)
                    Try
                        Return New binOptions
                    Catch ex As Exception
                        ' Fail
                        Return New noResults
                    End Try

                    ' Rack
                Case GetType(rackModel)
                    Try
                        Return New rackOptions
                    Catch ex As Exception
                        ' Fail
                        Return New noResults
                    End Try

                Case Else
            End Select

            Return New noResults

        End Get
    End Property

我有一个搜索功能,它根据用户扫描的项目类型返回数据模型。根据类型,select语句返回属性用户控件。我使用INotifyPropertyChanged和扫描事件来获取更新窗口。

答案 1 :(得分:0)

检查此主题:How to get reference to element in resources, WPF?

阅读,它可以帮助..有数千种工作方式,所以你必须找到他或更好。 使用的一个旧概念是MDI: http://www.codeproject.com/Articles/22927/Multiple-Window-Interface-for-WPF

答案 2 :(得分:0)

如何在一个窗口中设置窗口的所有可能配置,并切换您想要显示的内容的可见性,而不是在需要时显示?

这样可以更容易自定义而不是手动修改Visual Tree。但是请记住保持虚拟化任何面板,否则您的表现会受到影响。

答案 3 :(得分:0)

您是否在WPF中探索了ContentPresenter / ContentControl选项?在窗口中保留内容演示者/内容控件,并动态设置其Content属性...这样您就不需要重新加载窗口了。