情况
所以我在Infragistics功能区窗口中有一个Infragistics DockManager。
在我的Dock管理器中,我有许多单独的用户控件。其中一些具有特定于它们的功能区选项卡项。
当内容窗格从停靠管理器移除并浮动时,它的功能区中的标签将被删除。
这是因为它基本上被生成一个新窗口。当它被添加到新窗口时,它将从主要功能区窗口中删除。视觉树。因此,它会删除它的功能区,因为它认为它已经消失了。
建议的解决方案
因此,为了克服这个问题,我决定最好的做法是将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属性中。这有效,但加载时重复窗口等非常糟糕的行为。
答案 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