C# WPF设计问题

C# WPF设计问题,c#,.net,wpf,layout,C#,.net,Wpf,Layout,假设我正在开发一个聊天室,首先你来到一个登录窗口,当你登录时,我想使用同一个窗口,但更改控件:p如何设计这个窗口是最好的方法 有什么好的方法来实现这一点吗?我应该使用什么根元素 非常感谢 如果您想在同一个窗口中完成这一切,您可以使用网格作为根元素,托管登录元素(可能是布局的另一个网格)和聊天窗口。这些元素将堆叠在另一个元素之上,具体取决于声明它们的顺序。若要最初隐藏聊天室元素,请将其可见性设置为“折叠” 然后,当用户提交其登录详细信息时,可以将登录元素的可见性设置为折叠,并将聊天元素的可见性设置

假设我正在开发一个聊天室,首先你来到一个登录窗口,当你登录时,我想使用同一个窗口,但更改控件:p如何设计这个窗口是最好的方法

有什么好的方法来实现这一点吗?我应该使用什么根元素


非常感谢

如果您想在同一个窗口中完成这一切,您可以使用网格作为根元素,托管登录元素(可能是布局的另一个网格)和聊天窗口。这些元素将堆叠在另一个元素之上,具体取决于声明它们的顺序。若要最初隐藏聊天室元素,请将其可见性设置为“折叠”

然后,当用户提交其登录详细信息时,可以将登录元素的可见性设置为
折叠
,并将聊天元素的可见性设置为
可见

我曾经做过类似的事情,效果很好

希望有帮助

编辑我在Kaxaml中拼凑了这个,供您使用(因为我喜欢使用XAML):


欢迎聊天
用户名
密码
登录
_发送
你好,世界
最初,元素
\u loginForm
可见。您需要为登录按钮的Click事件附加一个处理程序来隐藏它,并显示
\u chatForm


此示例显示了几种布局控件的用法--网格、DockPanel和StackPanel。

或者,您可以使用StackPanel进行布局。作为一个简单的例子,面板中可以有2个元素;自定义登录控件以及聊天“显示”控件。成功登录后,从堆栈中删除自定义登录控件,以便只显示聊天。

这是WPF!在视图内外设置动画…现在就可以这样做了。谷歌代码上有一个叫做Witty(一个用WPF编写的桌面Twitter客户端)的协作项目,他们做了一些非常酷的事情,你可能想从他们那里借来。想想看,还有另一个WPF Twitter客户端(blu),它可以制作类似的动画,您可能想看看

在Witty中,“设置”对话框是一个普通窗口,但当您在选项卡之间切换时,一个情节提要会将您请求的窗口部分滑动到视图中。我还没有在这个级别上调试这个应用程序,但是我假设他们有一个水平的StackPanel,其中填充了固定在对话框高度和宽度上的容器,并使用故事板将其滑入和滑出

看看这两个应用程序,了解它们的想法。你可能想做一些类似的事情,但由于这是一个WPF应用程序,天空真的是极限


看看Josh Smith在MSDN杂志()上的文章。他介绍了一种有趣的方法,在主窗口上有一个内容演示者,使用数据模板切换窗口显示的内容。

关于如何在视图级别交换两个元素,这里已经有了一些答案。这篇文章提供了一种从根本上创建具有可互换视图的模块化应用程序设计的方法

你可以看一看。它是一个小型库(由Microsoft开发),除其他外,它有助于使您的应用程序更加模块化。有了它,您可以定义GUI的区域,这些区域可以具有可互换的视图

在包含的xaml中,导入CAL命名空间并使用RegionManager定义区域:

<Window ...
      xmlns:cal="http://www.codeplex.com/CompositeWPF"
 ...>
...
<ItemsControl cal:RegionManager.RegionName="MyRegion" />
...
…交换

_regionManager.Regions["MyRegion"].Add(new ChatView());

当然,这只是你能做什么的概要。为了实现此解决方案,您必须进一步了解CAL。它有很好的文档和许多示例可供学习。

我认为更直观的解决方案是使用框架控件作为窗口的基本控件,并使用NavigateService将框架的源更改为不同的页面控件(可以在单独的程序集中定义,也可以在同一项目中定义为不同的XAML文件)

您的窗口:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Frame Source="LogonPage.xaml" NavigationUIVisibility="Hidden" />

</Window>

以及您的单独登录页:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Logon">

    <!-- Your content of the page goes here... -->
</Page>

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Frame Source="LogonPage.xaml" NavigationUIVisibility="Hidden" />

</Window>
<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Logon">

    <!-- Your content of the page goes here... -->
</Page>