C# 包含事件和属性的布局
如何制作具有绑定属性和事件的XAML布局?我快疯了 首先,它适用于聊天应用程序,单室聊天可以很好地工作,从某种意义上说,我可以在XAML中设计应用程序的布局,在这里、那里和任何地方使用名称属性,以便在C#中对其进行控制,但如果由于多个聊天室而多次重复此布局,则会有点问题。我完全是通过C#来完成的,这导致了数百行只定义控件并将它们添加到窗口中,其中一个问题是名称属性会发生冲突 我本来打算修改一个随机控件的ControlTemplate,例如一个Frame,但后来我遇到了定义自定义属性和事件的问题 我只是不知道怎样才能做我想做的事。我在很多地方请求帮助,但都没有用 我真的疯了,快要完全放弃了 我的目标是拥有多个房间的tabcontrol,我需要能够轻松访问每个房间的控件,以便修改内容。我只是不知道在哪里 编辑C# 包含事件和属性的布局,c#,wpf,xaml,C#,Wpf,Xaml,如何制作具有绑定属性和事件的XAML布局?我快疯了 首先,它适用于聊天应用程序,单室聊天可以很好地工作,从某种意义上说,我可以在XAML中设计应用程序的布局,在这里、那里和任何地方使用名称属性,以便在C#中对其进行控制,但如果由于多个聊天室而多次重复此布局,则会有点问题。我完全是通过C#来完成的,这导致了数百行只定义控件并将它们添加到窗口中,其中一个问题是名称属性会发生冲突 我本来打算修改一个随机控件的ControlTemplate,例如一个Frame,但后来我遇到了定义自定义属性和事件的问题
公共聊天模板明显不同于私人聊天模板,因此我在这方面失败得如此之惨。听起来像是数据模板的完美位置 首先,您需要一个“聊天室”类,它包含给定聊天室的所有状态信息。然后,主ViewModel需要有这些对象的集合。最后,使用可能与当前窗口几乎相同的DataTemplate设置选项卡控件 选项卡控件的外观如下所示:
<TabControl ItemsSource="{Binding ActiveRooms}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
... (All your chat room stuff)
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
... (你聊天室里所有的东西)
这样,无论何时创建新文件室(顺便说一句,ActiveRooms应该是一个ObservableCollection),它都会自动创建一组新控件,并将它们绑定到新文件室的实例属性 您可以使用MVVM模式来完成,这在处理WPF时更可取。 然而,这需要一些经验和大量的思维扭曲 幸运的是,如果您来自Windows窗体世界,则始终可以使用经典方法。 只需为聊天室创建一个包含GUI、数据、逻辑、事件处理程序等的用户控件,
将此聊天室用户控件的实例放在选项卡容器中,您就完成了。看来您需要一个顺便说一句,您的挫折感可能来自试图以一种非预期的方式使用WPF,我建议您阅读Rachel的。我只是在您对事物外观有更多灵活性的基础上切换到WPF。而且,我真的不认为ItemsControl是我想要的。。。我使用TabControl查看了DataTemplates,但没有弄清楚如何根据传入消息的类型(公共/私有)在两个模板之间切换。绑定自定义属性和事件也是我找不到的。选项卡控件的模板只允许您有多个房间(与ItemControl相同)。public/private不应该影响这一点(因为这是在消息级别)。@user3439733是的,您需要一个ItemsControl。阅读相关文章。在WPF中,任何显示2个或更多相同“东西”(不管“东西”是什么)的UI都是ItemsControl。如果您想要干净、可维护的代码和易于自定义的UI,就没有办法解决这个问题。ItemTemplate会更复杂,因为它也会包含实际的选项卡,对吗?我还提到了公共/私有部分,因为它们包含不同的模板。例如,公共聊天室会有用户列表,而私人聊天室不会。这需要使用DataTemplateSelector,或者只是将用户列表可见性绑定到聊天室对象上的“IsPrivate”变量。项目模板只是标题(另一个Q/A,因此,如果您感兴趣,我可以添加链接到我的答案)。“选项卡”部分包含在控制模板中。