Хей всички!
Създадох шаблон за заглавие в AvalonDock 2.2 (WPF Toolkit). Проблемът е, че контекстното меню на LayoutAnchorable се задейства само когато щракна с десния бутон върху частта от заглавието, която съдържа нещо (а не цялата ширина на anchorable).
Ето съответния кодов сегмент, който използвам сега:
<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
(който е шаблонът по подразбиране на темата), всичко е наред, контекстното меню се задейства на цялата ширина на заглавната част.
Когато обаче използвам другите два шаблона (елементи Image-Name-IsDirty), контекстното меню се задейства само в началото на заглавната област (а не точно до звездичката).
Предполагам, че трябва да кажа на контейнера да напълни своя родителски контейнер, но не мога да разбера как. Използвах StackPanel
, Grid
, DockPanel
(LastChildFill = "True"
) с HorizontalAlignment
, зададено на Stretch
. Какъв вид контейнер трябва да използвам? какво ми липсва
P.S.: Мога да отговоря на вашите отговори само още 12 часа, след което ме няма за известно време (седмица). Но няма да изоставя този въпрос, докато не получа отговор :) Благодаря за търпението.