Infragistics PanelToolWindow删除功能区窗口选项卡

时间:2015-06-29 15:57:19

标签: c# wpf xaml infragistics

情况

所以我在Infragistics功能区窗口中有一个Infragistics DockManager。

在我的Dock管理器中,我有许多单独的用户控件。其中一些具有特定于它们的功能区选项卡项。

enter image description here

当内容窗格从停靠管理器移除并浮动时,它的功能区中的标签将被删除。

这是因为它基本上被生成一个新窗口。当它被添加到新窗口时,它将从主要功能区窗口中删除。视觉树。因此,它会删除它的功能区,因为它认为它已经消失了。

建议的解决方案

因此,为了克服这个问题,我决定最好的做法是将PanelToolWindow重新设置为另一个仅显示其子控件的功能区窗口。丝带。

问题

每当我尝试重新设置PanelToolWindow时,它都无法正常工作。我不确定为什么它不起作用,并且几乎没有关于重新设置此窗口的文档(请参阅下面的链接,了解我找到了哪些文档)。

示例代码

我尝试过几种不同的解决方案。也许这就是我如何实现这种风格。

这是我使用的基本模板。

<ControlTemplate TargetType="{x:Type igDock:PaneToolWindow}" 
                 x:Key="documentViewerToolWindow">
 <Border 
   Background="{TemplateBinding Background}"
   BorderBrush="{TemplateBinding BorderBrush}"
   BorderThickness="{TemplateBinding BorderThickness}">
  <Grid>
    <Grid.RowDefinitions>
       <RowDefinition Height="Auto" />
       <RowDefinition/>
    </Grid.RowDefinitions>
    <DockPanel Grid.Row="0" >
        <ContentPresenter Content="{TemplateBinding Title}" />
    </DockPanel>
        <ContentPresenter Content="{TemplateBinding Content}" Grid.Row="1"/>
   </Grid>
  </Border>
</ControlTemplate>

我试过了:

  • 将以上控件模板添加到Dock管理器上方的用户控件资源中,其格式为igDock:PaneToolWindow。这里的希望是它会让每个PaneToolWindow浮动。这没有用

  • 将上述控件模板添加到App.XAML资源中。这没有用。

  • 然后,我尝试使用以下代码

    显式重新设置停靠管理器
     <Style TargetType="igDock:PaneToolWindow">
           <Setter Property="Style" 
           Value="{StaticResource ResourceKey=documentViewerToolWindow}"/>
     </Style>
    
  • 我还尝试在ToolWindowLoaded事件中设置UseOSNonClientArea = false并将其硬编码到DockManager的XAML标记中。两者都没有效果。

  • 我尝试将Window.Content拉出PaneToolWindowEventArgs.Window.Content属性,并将它们生成到我的自定义Window.ContentControl.Content属性中。这有效,但加载时重复窗口等非常糟糕的行为。

Refrences

http://www.infragistics.com/community/forums/t/60620.aspx

http://www.infragistics.com/community/blogs/alex_fidanov/archive/2009/11/10/customizing-xamdockmanager-s-floating-panes.aspx

1 个答案:

答案 0 :(得分:0)

为了重新设置PaneToolWindow你必须做三件事。

首先,创建你的风格。我在XAML做了我的

<Window.Resources>
        <Style TargetType="{x:Type igDock:PaneToolWindow}" x:Key="DockPTW">

            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type igDock:PaneToolWindow}">

                        <igRibbon:RibbonWindowContentHost Initialized="RibbonWindowContentHost_Initialized">

                            <igRibbon:RibbonWindowContentHost.Ribbon>
                                <igRibbon:XamRibbon x:Name="MAIN_RIBBON" DockPanel.Dock="Top">

                                </igRibbon:XamRibbon>
                            </igRibbon:RibbonWindowContentHost.Ribbon>
                            <Grid Width="1000" Height="500">


                            </Grid>
                        </igRibbon:RibbonWindowContentHost>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Window.Resources>

其次,您需要收听XamDockManager ToolWindow_Loaded事件。

最后,在该事件中,您设置了两个属性。

首先设置UseOSNonClientArea = false,以便PaneToolWindow知道使用自定义Chrome。

  e.Window.UseOSNonClientArea = false;

然后将Style属性设置为您在XAML中声明的样式。

  e.Window.Style = this.Resources["DockPTW"] as Style;

注意

这不是一个完整的解决方案。 You still need to reimplement the dragging capabilities of the PaneToolWindow, which I am currently discussing here