我正在WPF中编写终端,它通过RS232与嵌入式设备通信主机。 我希望能够打开多个连接,这些连接将驻留在不同的选项卡上,我相信为此目的,WPF的tabContorl就足够了,但是客户希望能够在屏幕上平铺不同的选项卡,因为我了解基本的tabControl不允许你这样做。
任何想法如何做到这一点?
任何帮助将不胜感激, 提前谢谢。
答案 0 :(得分:1)
也许它有点矫枉过正,但我会尝试Avalon Dock from the WPF Toolkit,它是免费的。有了这个,您就可以移动终端,将它们停靠在您想要的任何地方,甚至只有在您取消其他人的情况下才能一次打开。
答案 1 :(得分:1)
我制作了一个名为ModalContentPresenter
的自定义WPF控件,允许您显示我认为合适的模态内容。该控件允许您在主要内容的基础上有条件地显示其他内容。
您的应用程序窗口将包含一个ModalContentPresenter
,其中包含TabControl
个主要内容,其中包含ItemsControl
的模态内容。
<c:ModalContentPresenter IsModal="{Binding IsTiling}">
<DockPanel>
<Button Content="Show tiled view"
Command={Binding ShowTiledViewCommand}
DockPanel.Dock="Top"/>
<TabControl ItemsSource="{Binding Connections}"> />
</DockPanel>
<c:ModalContentPresenter.ModalContent>
<DockPanel>
<Button Content="Hide tiled view"
Command={Binding HideTiledViewCommand}
DockPanel.Dock="Top"/>
<Itemscontrol ItemsSource="{Binding Connections}" />
</DockPanel>
</c:ModalContentPresenter.ModalContent>
</c:ModalContentPresenter>
TabControl
。TabControl
和ItemsControl
都绑定到viewModel中的同一数据集合,以确保平铺视图与标签控件中的项目同步。Boolean
的{{1}}属性,当您希望显示“平铺”视图时,该属性应返回IsTiling
,并在隐藏时显示true
。 false
使用的布局面板,以更改“平铺”数据收集的方式。有关如何使用控件的其他示例,请参阅this答案。
viewModel的界面如下所示:
ItemsControl
完成此工作后,您可以添加一些其他增强功能,以改善用户界面的外观。
我首先将自定义控件模板分配给public interface ViewModel {
public ObservableCollection<Connection> Connections { get; }
public boolean IsTiling { get; }
public ICommand ShowTiledViewCommand { get; }
public ICommand HideTiledViewCommand { get; }
}
,以便在“标题”区域中显示TabControl
。此Button
绑定到viewModel中的命令,该命令负责将Button
属性更改为IsTiling
。
This问题提供了一个答案链接,探讨了实现这一目标的方法。
第二个增强功能是从模态内容中删除按钮,并在用户选择项目控件中的项目时调用true
命令。然后,您可以添加一些其他逻辑,在关闭平铺视图时选择正确的选项卡。我认为这可以通过在viewModel中添加一个表示所选连接的附加属性来实现。