WPF中的多个窗口以及平铺它们的能力

时间:2014-12-24 06:35:44

标签: wpf wpf-controls

我正在WPF中编写终端,它通过RS232与嵌入式设备通信主机。 我希望能够打开多个连接,这些连接将驻留在不同的选项卡上,我相信为此目的,WPF的tabContorl就足够了,但是客户希望能够在屏幕上平铺不同的选项卡,因为我了解基本的tabControl不允许你这样做。

任何想法如何做到这一点?

任何帮助将不胜感激, 提前谢谢。

2 个答案:

答案 0 :(得分:1)

也许它有点矫枉过正,但我​​会尝试Avalon Dock from the WPF Toolkit,它是免费的。有了这个,您就可以移动终端,将它们停靠在您想要的任何地方,甚至只有在您取消其他人的情况下才能一次打开。

enter image description here

答案 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
  • TabControlItemsControl都绑定到viewModel中的同一数据集合,以确保平铺视图与标签控件中的项目同步。
  • 您的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中添加一个表示所选连接的附加属性来实现。