标签: avalondock

AvalonDock 2配Caliburn Micro

是否有关于将AvalonDock与Caliburn Micro MVVM一起使用的博客或文章?谷歌搜索时找不到多少

http://avalondock.codeplex.com/

编辑:得到了投票,所以为什么不用最终解决方案更新.完整代码可以在这里找到

https://github.com/AndersMalmgren/FreePIE

大多数与avalon相关的代码都可以在这里找到

https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellView.xaml

Sam回答后更新

为了使Caliburn成功,需要做的非常非常少.首先实现一个LayoutItemTemplateSelector

public class AutobinderTemplateSelector : DataTemplateSelector
{
    public DataTemplate Template { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        return Template;
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其与内容控件和Caliburns View.Model附加机制一起使用

<xcad:DockingManager.LayoutItemTemplateSelector>
    <avalonDock1:AutobinderTemplateSelector>
        <avalonDock1:AutobinderTemplateSelector.Template>
            <DataTemplate>
                <ContentControl cal:View.Model="{Binding . }" IsTabStop="False" />
            </DataTemplate>
        </avalonDock1:AutobinderTemplateSelector.Template>
    </avalonDock1:AutobinderTemplateSelector>
</xcad:DockingManager.LayoutItemTemplateSelector>
Run Code Online (Sandbox Code Playgroud)

mvvm avalondock caliburn.micro

7
推荐指数
2
解决办法
2454
查看次数

使用AvalonDock 2.0时未处理的'System.ComponentModel.Win32Exception'

我正在使用AvalonDock 2.0,当我打开一个dock容器时,在调试模式下应用程序崩溃(它在没有调试的情况下运行时工作正常).我得到以下异常:

WindowsBase.dll中发生了未处理的"System.ComponentModel.Win32Exception"类型异常

附加信息:操作成功完成

我遇到了这个答案,建议取消选中"例外设置"中的框.有线的事情是它第一次使用它.但它不再存在了.我试过其他机器也不行.任何有关如何解决此问题的建议.
Avalon代码(第5行引发的异常)

protected override IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
            if (msg == Win32Helper.WM_WINDOWPOSCHANGING) {
                if (_internalHost_ContentRendered) {
                    // the below line throw the exception
                    Win32Helper.SetWindowPos(_internalHwndSource.Handle, Win32Helper.HWND_TOP, 0, 0, 0, 0, Win32Helper.SetWindowPosFlags.IgnoreMove | Win32Helper.SetWindowPosFlags.IgnoreResize);
                }
            }
            return base.WndProc(hwnd, msg, wParam, lParam, ref handled);
        }
Run Code Online (Sandbox Code Playgroud)

c# wpf exception win32exception avalondock

7
推荐指数
1
解决办法
3376
查看次数

带有棱镜区域适配器的AvalonDock

我已经看到了一些关于SO的问题,但它们似乎都不适用于我.我希望能够使用带有Prism 4 的伟大的Avalondock 2.0.但是,所有的样本区域适配器都适用于Avalondock 1.x系列,我无法使其工作.

有没有人有关于如何为AvalonDock的LayoutDocumentPane和LayoutAnchorablePane创建Region Adapter的示例代码?

c# wpf prism avalondock

6
推荐指数
1
解决办法
4078
查看次数

AvalonDock DockingManager不加载布局

为了保存和加载我的布局,我遵循了这里的说明,但它对我不起作用.

我在XAML里面有这个MainWindow:

<StackPanel Orientation="Vertical">
    <Button Content="Save"
            Click="SaveButton_Click"/>
    <Button Content="Load"
            Click="LoadButton_Click"/>
    <ad:DockingManager x:Name="myDM">
        <ad:LayoutRoot>
            <ad:LayoutPanel>
                <ad:LayoutDocumentPane>
                    <ad:LayoutDocument Title="Document">
                        <TextBox />
                    </ad:LayoutDocument>
                </ad:LayoutDocumentPane>
            </ad:LayoutPanel>
            <ad:LayoutRoot.LeftSide>
                <ad:LayoutAnchorSide>
                    <ad:LayoutAnchorGroup>
                        <ad:LayoutAnchorable Title="Left">
                            <TextBox/>
                        </ad:LayoutAnchorable>
                    </ad:LayoutAnchorGroup>
                </ad:LayoutAnchorSide>
            </ad:LayoutRoot.LeftSide>
        </ad:LayoutRoot>
    </ad:DockingManager>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

这些是按钮点击的事件处理程序:

private void SaveButton_Click(object sender, RoutedEventArgs e)
{
    XmlLayoutSerializer layoutSerializer = new XmlLayoutSerializer(myDM);
    using (var writer = new StreamWriter("test"))
    {
        layoutSerializer.Serialize(writer);
    }
}

private void LoadButton_Click(object sender, RoutedEventArgs e)
{
    XmlLayoutSerializer layoutSerializer = new XmlLayoutSerializer(myDM);
    using (var reader = …
Run Code Online (Sandbox Code Playgroud)

c# wpf xml-serialization avalondock

6
推荐指数
1
解决办法
1万
查看次数

如何在AvalonDock 2(LayoutDocumentPane)中禁用左,右,顶部和底部放置目标

我正在尝试禁用掉落目标,除了avalon dock中的中心目标.在codeplex中找不到任何文档.我发现了一个计算器类似的问题在这里,但没有正确的反应如此反复询问.

wpf avalondock

6
推荐指数
1
解决办法
315
查看次数

如何增强 TabControl 以停靠和浮动 TabItems 或文档?

我有一个TabControl允许用户管理以下文档的文件:

在此处输入图片说明

在某些时候,我想添加一个功能,允许用户浮动TabItems 并将它们停靠回与TabControl您在 Visual Studio 中可以做的事情差不多的地方。此功能将允许用户更轻松地比较文档并在它们之间复制/粘贴等。

我有一些关于如何去做这件事的一般想法。该TabControl有其ItemsSource必然的文档视图模型的列表。

要浮动选项卡:

  1. Thumb控件添加到TabItem.
  2. 当用户拖动 时Thumb,关联的文档视图模型将从TabControl列表中删除。
  3. 一个单独的文档Window被打开,与文档视图模型绑定,以显示/编辑该文档。

要停靠选项卡:

  1. 在 中添加DragOver事件处理程序TabControl以识别Window拖过选项卡条区域的文档。
  2. 关联的文档视图模型被添加到TabControl列表中。
  3. 文档Window已关闭。

有没有关于如何做到这一点的例子,或者你有办法做到这一点?

谢谢。

wpf tabcontrol dock mvvm avalondock

5
推荐指数
1
解决办法
6639
查看次数

关闭选项卡后如何从 DockManager 中删除 LogicalChildren?

我一直在使用DockManager和。LayoutRootLayoutAnchorablePaneLayoutDocumentPane

<ad:DockingManager x:Name="dockManager" >
  <adLayout:LayoutRoot>
    <adLayout:LayoutPanel x:Name="myLayoutPanel" Orientation="Horizontal">
      <adLayout:LayoutAnchorablePane x:Name="myLayoutAnchorablePane" DockWidth="400"/>
      <adLayout:LayoutDocumentPane x:Name="myDocumentPane" ChildrenCollectionChanged="myDocumentPane_ChildrenCollectionChanged"/>
    </adLayout:LayoutPanel>
  </adLayout:LayoutRoot>
</ad:DockingManager>
Run Code Online (Sandbox Code Playgroud)

然而,我遇到的一个问题是DockManager.LogicalChildren,当我关闭窗口时,进入 的ContentPresenter和 my永远不会被删除,并且会越来越多,直到它开始减慢应用程序的速度。UserControlLayoutDocumentLogicalChildren

当我检测到 时ChildrenCollectionChanged,如何删除与之关联的ContentPresenter和?UserControlLayoutDocument

编辑1:好的,也是LogicalChildrenSystem.Linq.Enumerable.WhereSelectListIterator<System.WeakReference,object>所以我无法从该列表中删除任何内容(而且它只有一个get,并且没有set)。

LayoutDocumentPane.RemoveChild()方法不会对 执行任何操作DockingManager.LogicalChildren,因此我无法弄清楚 是LogicalChildren从哪里提取迭代日期的。

编辑2:所以,我尝试向DocumentClosing事件处理程序添加一个事件DockManager,但它似乎仍然没有LogicalChildren从 DockManager 中删除未使用的事件。

void dockManager_DocumentClosing(object sender, Xceed.Wpf.AvalonDock.DocumentClosingEventArgs e) {
    UserControl uc = e.Document.Content as UserControl;
    e.Cancel …
Run Code Online (Sandbox Code Playgroud)

c# wpf avalondock

5
推荐指数
1
解决办法
2450
查看次数

Avalon Dock和Caliburn Micro - 文档窗格上没有标题(选项卡标题)

我熟悉Caliburn Micro及其使用的范例,但我现在正在尝试集成AvalonDock.

作为一个POC,我有一个非常简单的应用程序,其中一个shell视图模型包含一个按钮,用于激活我的StructureViewModels - 一个包含名称和标题的简单类.结构视图是一个用户控件,它只是将名称显示为文本.

ViewModel和Views正在使用Caliburn很好地连接,它们正在Docking Manager中显示.我可以拖动和分离,枚举窗格等 - 所有Avalon功能似乎都有效.我遇到的问题是它们在Avalon标题(标签)中没有标题显示.

截图

ShellViewModel:

using AvalonDemo.Properties;
using Caliburn.Micro;

namespace AvalonDemo.ViewModels
{
    public class ShellViewModel : Conductor<IScreen>.Collection.OneActive
    {
        private int _structureCount;

        public ShellViewModel()
        {
            WindowTitle = Resources.MainWindowTitle;
            _structureCount = 1;
        }

        public string WindowTitle { get; set; }

        public void OpenStructure()
        {
            ActivateItem(new StructureViewModel
            {
                Name = "Structure" + _structureCount++,
                Title = "Structure" + _structureCount
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑解决方案:

ShellView:

<Window x:Class="AvalonDemo.Views.ShellView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:avalonDock="http://schemas.xceed.com/wpf/xaml/avalondock"
    xmlns:cal="http://www.caliburnproject.org"
    xmlns:common="clr-namespace:AvalonDemo.Common"
    Title="{Binding WindowTitle}"
    Height="850" Width="1200">
    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm avalondock caliburn.micro

5
推荐指数
1
解决办法
1689
查看次数

如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

我需要在 AvalonDock 2.0 中加载一组项目作为文档。这些对象从一个抽象类继承,我想根据子类在文档中呈现一个框架。

这是我的 XAML:

<ad:DockingManager Background="Gray" DocumentsSource="{Binding Path=OpenProjects}" 
        ActiveContent="{Binding Path=CurrentProject, Mode=TwoWay}">
    <ad:DockingManager.DocumentHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=OpenProjects/Name}" />
        </DataTemplate>
    </ad:DockingManager.DocumentHeaderTemplate>
    <ad:DockingManager.LayoutItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.Resources>
                    <DataTemplate DataType="{x:Type vm:SubclassAViewModel}">
                        <Frame Source="Pages/SubclassAProject.xaml" />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type vm:SubclassBViewModel}">
                        <Frame Source="Pages/SubclassBProject.xaml" />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type vm:SubclassCViewModel}">
                        <Frame Source="Pages/SubclassCProject.xaml" />
                    </DataTemplate>
                </Grid.Resources>
            </Grid>
        </DataTemplate>
    </ad:DockingManager.LayoutItemTemplate>
    <ad:LayoutRoot>
        <ad:LayoutPanel>
            <ad:LayoutDocumentPaneGroup>
                <ad:LayoutDocumentPane>

                </ad:LayoutDocumentPane>
            </ad:LayoutDocumentPaneGroup>
        </ad:LayoutPanel>
    </ad:LayoutRoot>
</ad:DockingManager>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经实现了显示与OpenProjects集合中项目一样多的文档,但我似乎无法在每个文档中显示任何内容。

另外,我不知道我ActiveContent是否正确使用:我想分配给CurrentProject当前活动文档上分配的 ViewModel。

感谢您的时间。

c# wpf binding mvvm avalondock

5
推荐指数
1
解决办法
541
查看次数

AvalonDock浮动窗口可以设置为不“Always On Top”吗?

与我之前关于使浮动窗口独立于主 DockingManager 的问题相关,这里有一个类似但希望更简单的问题:

AvalonDock 浮动窗口是否可以设置为不位于主 DockingManager 窗口的“Always On Top”?

我正在翻阅AvalonDock 源代码,试图找到一种方法来做到这一点,但我还没有找到任何可行的方法。

理想情况下,我追求的是与 Visual Studio 具有相同效果的东西Tools > Options > Environment > Tabs and Windows > Floating tool windows always stay on top of the main window(至少在 VS2013 和 VS2015 中可用)。

c# wpf avalondock

5
推荐指数
1
解决办法
1292
查看次数