2014-07-09 46 views
0

Hy everyone!AvalonDock 2.2 - 全宽TitleTemplate(填充父容器)

我AvalonDock 2.2(WPF工具包)创建的标题模板。问题在于,只有右键单击标题中包含某些内容(而不是可锚定的整个宽度)的部分时,才会触发LayoutAnchorable的上下文菜单。

这是我现在使用的相关代码段:

<ad:DockingManager x:Class="Pdn.Gui.Docking.Control.DockingSystem" ... 
    AnchorablesSource="{Binding Path=Panels}"> 
    <ad:DockingManager.Resources> 
     <DataTemplate x:Key="DockingWindowTitleDataTemplate" DataType="{x:Type ad:LayoutContent}"> 
      <StackPanel ToolTip="{Binding Path=Content.ToolTip}" Orientation="Horizontal" HorizontalAlignment="Stretch"> 
       <Image MaxHeight="16" MaxWidth="16" VerticalAlignment="Center" 
         Source="{Binding Path=Content.IconSource, Converter={StaticResource IconToImageSourceConverter}}" /> 
       <TextBlock Text="{Binding Path=Content.Name}" Margin="5,0,0,0" VerticalAlignment="Center"/> 
       <TextBlock Text="*" Visibility="{Binding Path=Content.DirtySignVisibility}" VerticalAlignment="Center"/> 
      </StackPanel> 
     </DataTemplate> 

     <DataTemplate x:Key="DockingWindowTitleGridDataTemplate" DataType="{x:Type ad:LayoutContent}"> 
      <Grid ToolTip="{Binding Path=Content.ToolTip}" HorizontalAlignment="Stretch"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="Auto" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <Image Grid.Column="0" MaxHeight="16" MaxWidth="16" VerticalAlignment="Center" 
         Source="{Binding Path=Content.IconSource, Converter={StaticResource IconToImageSourceConverter}}" /> 
       <TextBlock Grid.Column="1" Text="{Binding Path=Content.Name}" Margin="5,0,0,0" VerticalAlignment="Center"/> 
       <TextBlock Grid.Column="2" Text="*" Visibility="{Binding Path=Content.DirtySignVisibility}" VerticalAlignment="Center"/> 
      </Grid> 
     </DataTemplate> 

     <DataTemplate x:Key="DefaultPanelTitle"> 
      <TextBlock Text="{Binding Path=Content.Name}" TextTrimming="CharacterEllipsis" /> 
     </DataTemplate> 

     ... 
    </ad:DockingManager.Resources> 

    <ad:DockingManager.AnchorableTitleTemplate> 
     <StaticResource ResourceKey="DockingWindowTitleDataTemplate" /> 
    </ad:DockingManager.AnchorableTitleTemplate> 

    ... 
</ad:DockingManager> 

当我使用DefaultPanelTitle模板(这是主题的默认模板),一切都很好,在上下文菜单上触发标题部分的全部宽度。

然而,当我使用其他两个模板(图像名称 - IsDirty元素),上下文菜单仅在标题区(和星号不正确)的开始触发。

我猜我应该告诉容器,以填补它的父容器,但我无法弄清楚如何。我HorizontalAlignment集中使用StackPanelGridDockPanelLastChildFill = "True")到Stretch。我应该使用什么样的容器? 我错过了什么?

P.S:我只能给你的答案回应再持续12小时,然后我离开了一段时间(一周)。但我不会放弃这个问题,直到它被回答:)感谢您的耐心。

回答

1

那么,解决方案很简单。我将StackPanel包装在一个Label中。现在可以在标题部分的每个像素上触发上下文菜单。模板现在看起来像这样:

<ad:DockingManager x:Class="Pdn.Gui.Docking.Control.DockingSystem" ... 
    AnchorablesSource="{Binding Path=Panels}"> 
    <ad:DockingManager.Resources> 
     <DataTemplate x:Key="DockingWindowTitleDataTemplate" DataType="{x:Type ad:LayoutContent}"> 
      <Label> 
       <StackPanel ToolTip="{Binding Path=Content.ToolTip}" Orientation="Horizontal" HorizontalAlignment="Stretch"> 
        <Image MaxHeight="16" MaxWidth="16" VerticalAlignment="Center" 
         Source="{Binding Path=Content.IconSource, Converter={StaticResource IconToImageSourceConverter}}" /> 
        <TextBlock Text="{Binding Path=Content.Name}" Margin="5,0,0,0" VerticalAlignment="Center"/> 
        <TextBlock Text="*" Visibility="{Binding Path=Content.DirtySignVisibility}" VerticalAlignment="Center"/> 
       </StackPanel> 
      </Label> 
     </DataTemplate> 

     ... 
    </ad:DockingManager.Resources> 

    <ad:DockingManager.AnchorableTitleTemplate> 
     <StaticResource ResourceKey="DockingWindowTitleDataTemplate" /> 
    </ad:DockingManager.AnchorableTitleTemplate> 

    ... 
</ad:DockingManager> 

我喜欢简单的解决方案。

+0

不得不更改数据类型= “{X:广告类型:LayoutContent}” 到数据类型= “{X:广告类型:LayoutAnchorable}”,因为从我的LayoutContent结束不存在(v.2.5) – lionheart