标签: avalondock

DockableFloatingWindow上的Maximize和Aero snap

我有以下代码给一个未对接的浮动AvalonDock窗口最大化的能力:

class MaximizableDockableContent : AvalonDock.DockableContent
{
    public MaximizableDockableContent()
        : base()
    {
         base.StateChanged += MaximizableDockableContent_StateChanged;
    }

    private void MaximizableDockableContent_StateChanged(
        object sender, RoutedEventArgs e)
    {
        MaximizableDockableContent mdc = (MaximizableDockableContent)sender;
        if (mdc.State == DockableContentState.DockableWindow)
        {
            base.FloatingWindowSizeToContent = SizeToContent.WidthAndHeight;
            FloatingDockablePane fdp = (FloatingDockablePane)base.Parent;
            DockableFloatingWindow dfw = (DockableFloatingWindow)fdp.Parent;

            //dfw.WindowState = WindowState.Maximized;
            dfw.WindowStyle = WindowStyle.ThreeDBorderWindow;
            dfw.ResizeMode = ResizeMode.CanResize;

            //disable minimize button
            ControlBox.SetHasMinimizeButton(dfw, false);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何为此添加Aero Snap功能?

wpf aero maximize avalondock

26
推荐指数
1
解决办法
1799
查看次数

加载和保存anchora的布局 - 可见性的绑定

我面临的问题是,在加载旧布局后,我无法打开类型X的锚定.仅当我在保存布局之前关闭了类型X的可锚定时才会发生这种情况.

AvalonDock有没有类似的问题?这是AvalonDock的错误吗?经过多年的调试,我担心在ViewModel中进行<Setter Property="IsActive" Value="{Binding Model.IsActive, Mode=TwoWay}"/>更改时,视图中的绑定无法正确更新IsActive.AvalonDock应该负责这项任务.但也许问题是加载和保存布局?

代码

视图

LoadedDockingManager在我的视图中的事件加载我的anchorables(=工具窗口)的保存布局像这样(简化):

string savedLayout = Properties.Settings.Default.Layout;
XmlDocument doc = new XmlDocument();
doc.LoadXml(savedLayout);

// very simplified code. load saved xml layout and add anchorables to the dockmanager
doc.SelectNodes("//LayoutAnchorable").OfType<XmlNode>().ToList().ForEach(anchorable =>
{
    this.DockManager.AnchorablesSource.Add(anchorable);
});
Run Code Online (Sandbox Code Playgroud)

我正在我的视图中的Closing事件中保存我的anchorables的当前布局,MainWindow如下所示(简化):

XmlDocument doc = new XmlDocument();
XmlLayoutSerializer xmlLayoutSerializer = new XmlLayoutSerializer(this.DockManager);

using (MemoryStream stream = new MemoryStream())
{
    xmlLayoutSerializer.Serialize(stream);
    stream.Seek(0, SeekOrigin.Begin);
    doc.Load(stream);
}
// here happens some magic. i think …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm avalondock xceed

12
推荐指数
1
解决办法
954
查看次数

将AvalonDock从1.3升级到2.0

我正在尝试将应用程序中的AvalonDock从1.3升级到2.0,但几乎没有关于此的文档.

我看一下简单,通过这样做导入它

xmlns:avalonDock="http://avalondock.codeplex.com"
Run Code Online (Sandbox Code Playgroud)

但是这没用.

Error   The tag 'DockingManager' does not exist in XML namespace 'http://avalondock.codeplex.com'. Line 41 Position 10.
Run Code Online (Sandbox Code Playgroud)

我也用旧方式试了一下.

xmlns:avalonDock="clr-namespace:AvalonDock;assembly=AvalonDock"
Run Code Online (Sandbox Code Playgroud)

这也没有奏效

Error   The tag 'ResizingPanel' does not exist in XML namespace 'clr-namespace:AvalonDock;assembly=AvalonDock'. Line 71 Position 22.
Run Code Online (Sandbox Code Playgroud)

如果他们重命名了控件,那么拥有2.0中现在存在的控件列表会很有用.

我试图编译简单的代码,但没有成功.

c# wpf avalondock

11
推荐指数
2
解决办法
6881
查看次数

示例代码,用于说明如何在MVVM应用程序中使用Avalondock

我试图在我的wpf应用程序中使用AvalonDock,这是一个MVVM应用程序.环顾四周,我找不到任何示例应用程序显示我该怎么做.

AlavonDock表示它对MVVM有本机支持,所以它应该很容易支持mvvm,但是没有示例代码.

我的问题是:

  1. 如何编写具有文档管理器的xaml并将其绑定到viewmodel?
  2. 如何在此方案中向面板添加新文档?
  3. 如何从documentmanegr获取有关布局的信息(如果可能的话).

c# wpf xaml mvvm avalondock

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

AvalonDock 2.0 PRISM RegionAdapter的布局保存和加载?

有没有人设法使用Prism模块和AvalonDock的动态注入视图成功加载和保存布局?

我有一个用于AvalonDock DockingManager的RegionAdapter,它允许我在Prism模块中使用RegionViewRegistry注册视图,它们被AvalonDock中的LayoutAnchorable对象包装.

这一切都正常,除了保存和加载布局.当我从我的模块中添加一个视图时,它会通过RegionAdapter并正确序列化(我有一个后序列化步骤,它将一些自定义XML添加到输出中,以便为我提供有关在LayoutAnchorable中显示的模块的一些信息).

当我加载布局时,我实现了LayoutSerializationCallback,将内容设置为适当的模块视图并正确显示.

问题是如果我随后尝试序列化,我永远不会得到反序列化中添加的LayoutAnchorables.

我有兴趣听到任何设法创建AvalonDock + Prism +布局保存和加载的人.

我对Infragistics和SyncFusion的DockManagers进行了评估,并且取得了更少的成功,它们都没有在反序列化上提供回调以允许我注入我的自定义视图.

c# wpf docking avalondock

9
推荐指数
1
解决办法
1283
查看次数

DockingManager是否带有处理Anchorables的内置方法

使用一组Anchorables设置AvalonDock时,例如:

<a:LayoutRoot>
    <a:LayoutPanel Orientation="Horizontal">    
        <a:LayoutAnchorablePane>
            <a:LayoutAnchorable Title="A1">
                <!-- content -->
            </a:LayoutAnchorable>
            <a:LayoutAnchorable Title="A2">
                <!-- content -->
            </a:LayoutAnchorable>
    </a:LayoutAnchorablePane>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)

DockingManager(或AvalonDock中的其他东西)是否有内置的方式来管理已关闭的Anchorables?它们是否存储在某个地方的集合中,以便可以检索并再次显示它们?

例如,用户从上面的代码中关闭第一个(A1),会发生什么?
如何再次显示?

处理关闭和恢复锚点的典型工作流程是什么?

c# wpf xaml avalondock xceed

9
推荐指数
1
解决办法
3585
查看次数

AvalonDock DocumentContent没有垃圾回收

我创建了一个使用AvalonDock框架的应用程序.关键部分是使用AvalonDock.DocumentContent派生编辑器编辑域模型实体的能力.我遇到了一个问题,发现我的编辑在关闭并从DockingManager.Documents集合中删除后没有被垃圾收集.

经过一些徒劳无功的搜索后,我创建了一个小型测试应用程序,可以通过以下方式重新创建:

  • 在Visual Studio中(我使用的是2008),创建一个名为的新WPF应用程序AvalonDockLeak;
  • 添加对AvalonDock库的引用(我的版本是1.3.3571.0);
  • 添加一个名为的新UserControl Document;
  • 将Document.xmal更改为:

    <ad:DocumentContent x:Class="AvalonDockLeak.Document"
                        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock">
        <Grid>
            <TextBox />
        </Grid>
    </ad:DocumentContent>
    
    Run Code Online (Sandbox Code Playgroud)
  • 将Document.xmal.cs更改为:

    namespace AvalonDockLeak
    {
        using AvalonDock;
    
        public partial class Document : DocumentContent
        {
            public Document()
            {
                InitializeComponent();
            }
    
            ~Document()
            {
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    我添加的析构函数能够诊断问题,在方法打开时添加一个断点{,并查看它是否被击中.它总是关闭测试应用程序,但不是更早.

  • 现在将Window1.xaml更改为:

    <Window x:Class="AvalonDockLeak.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock"
            Title="Memory Leak Test" Height="300" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Button Name="NewButton" Click="NewButton_Click" Content="New" Height="26" Width="72" />
            <ad:DockingManager x:Name="DockManager" Grid.Row="1">
                <ad:DocumentPane /> …
    Run Code Online (Sandbox Code Playgroud)

c# wpf garbage-collection avalondock

8
推荐指数
2
解决办法
3248
查看次数

AvalonDock - 阻止文档窗格中的可锚定窗格停靠

是否可以防止锚定停靠在我的文档窗格中?我希望它们可以拖动并在屏幕上移动,但有时用户将它们拖到文档窗格中,这使它们看起来很差.然后他们关闭标签,我无法重新打开可锚定的.

如果它有助于我的Avalon代码如下:

        <avalonDock:DockingManager.Theme>
            <avalonDock:VS2010Theme />
        </avalonDock:DockingManager.Theme>

        <avalonDock:DockingManager.DocumentHeaderTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <StackPanel Orientation="Horizontal">
                        <!-- the TextBlock named Limiter is used to limit the height of the TextBlock for the workflow name. -->
                        <TextBlock x:Name="Limiter" TextWrapping="NoWrap" Visibility="Hidden"
                                                       TextTrimming="CharacterEllipsis">
                                                L
                        </TextBlock>
                        <TextBlock Text="{Binding Path=Title}" VerticalAlignment="Center"
                                   ToolTip="{StaticResource WorkflowTabItemToolTip}"
                                   MaxHeight="{Binding ActualHeight, ElementName=Limiter}" MaxWidth="150"
                                   TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Margin="0,0,2,0" 
                                   AutomationProperties.AutomationId="WorkflowTabTitleText"/>
                        <TextBlock Text=" *" 
                                   ToolTip="Has unsaved changes"
                                   Visibility="{Binding Content.UnsavedEdits, Converter={StaticResource BoolToVis}}"
                                   AutomationProperties.AutomationId="DirtyTabIndicator"/>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </avalonDock:DockingManager.DocumentHeaderTemplate>

        <avalonDock:DockingManager.LayoutItemContainerStyleSelector>
            <utilities1:PanesStyleSelector>
                <utilities1:PanesStyleSelector.WebUIStyle>
                    <Style TargetType="{x:Type avalonDock:LayoutAnchorableItem}">
                        <Setter Property="Title" Value="{Binding Model.Title}"/>
                        <Setter Property="IconSource" Value="{Binding …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml avalondock

8
推荐指数
1
解决办法
2634
查看次数

我在哪里可以获得类似于Visual Studio 2010界面的WPF控件的主题?

我的应用程序是围绕AvalonDock构建的,它具有相当不错的Visual Studio 2010外观(比其他所有外观更漂亮).现在我想为我的应用程序的其余部分设计样式.我对以下部分最感兴趣:

  • 工具栏 - 我主要设法自己获得颜色,但VS工具栏仍然更漂亮.
  • (上下文)菜单 - VS将蓝色菜单项焦点框替换为漂亮的橙色,这使应用程序更加温暖和友好.
  • 主窗口背景 - 这是AD没有做到的一件事.

这些风格是在网络上的某个地方吗?或者它们可以以某种方式从VS中提取出来?

谢谢你的帮助.

wpf styling wpf-controls avalondock

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

使用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
查看次数