2 Answers, 1 is accepted
0
Accepted
Thomas
Top achievements
Rank 1
answered on 17 Oct 2011, 09:00 PM
Hi Anders,
This can be done easily using a DataTemplate for the RadPane.HeaderTemplate. From reading the suggestions in the forums here, it looks much more difficult than it is. There is no need to alter the docking control's ControlTemplates or Styling as seen in most of the discussions.
These are the behaviors with the DataTemplate I created:
Hope this helps.
This can be done easily using a DataTemplate for the RadPane.HeaderTemplate. From reading the suggestions in the forums here, it looks much more difficult than it is. There is no need to alter the docking control's ControlTemplates or Styling as seen in most of the discussions.
These are the behaviors with the DataTemplate I created:
- Hide the close button if the tab has CanUserClose set to false
- Always show the close button on the selected tab (IsSelected = true)
- Show the close button when the mouse is over a non-selected tab
Here is the UserControl markup with the DataTemplate and global styles that I used:
<
UserControl
x:Class
=
"MyApp.Core.Layout.LayoutView"
xmlns:prism
=
"clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism"
xmlns:telerikDocking
=
"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Docking"
xmlns:telerikControls
=
"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls"
xmlns:telerikChromes
=
"clr-namespace:Telerik.Windows.Controls.Chromes;assembly=Telerik.Windows.Controls"
xmlns:core
=
"clr-namespace:MyApp.Core;assembly=MyApp.Core"
mc:Ignorable
=
"d"
d:DesignHeight
=
"100"
d:DesignWidth
=
"100"
>
<
UserControl.Resources
>
<!-- PaneHeader DataTemplate with close button -->
<
DataTemplate
x:Key
=
"PaneHeaderDataTemplate"
>
<
DataTemplate.Resources
>
<
Style
x:Key
=
"PaneHeaderCloseButtonStyle"
TargetType
=
"{x:Type telerikControls:RadButton}"
>
<
Style.Resources
>
<
telerikControls:Office_BlackTheme
x:Key
=
"Theme"
/>
<
SolidColorBrush
x:Key
=
"ButtonIconBrush_Normal"
Color
=
"#FF696969"
/>
<
SolidColorBrush
x:Key
=
"ButtonIconBrush_MouseOver"
Color
=
"#FF000000"
/>
<
SolidColorBrush
x:Key
=
"ButtonIconBrush_Pressed"
Color
=
"#FF000000"
/>
<
SolidColorBrush
x:Key
=
"ButtonIconBrush_Disabled"
Color
=
"#FF8D8D8D"
/>
<
Style
x:Key
=
"CloseIconStyle"
TargetType
=
"{x:Type Path}"
>
<
Setter
Property
=
"Data"
Value
=
"M0,0 L2,0 2,1 3,1 3,2 5,2 5,1 6,1 6,0 8,0 8,1 7,1 7,2 6,2 6,3 5,3 5,4 6,4 6,5 6,5 7,5 7,6 8,6 8,7 6,7 6,6 5,6 5,5 3,5 3,6 2,6 2,7 0,7 0,6 1,6 1,5 2,5 2,4 3,4 3,3 2,3 2,2 1,2 1,1 0,1 Z"
/>
<
Setter
Property
=
"Stretch"
Value
=
"Fill"
/>
<
Setter
Property
=
"VerticalAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"HorizontalAlignment"
Value
=
"Center"
/>
</
Style
>
</
Style.Resources
>
<
Setter
Property
=
"ToolTip"
Value
=
"Close"
/>
<
Setter
Property
=
"Width"
Value
=
"15"
/>
<
Setter
Property
=
"Height"
Value
=
"15"
/>
<
Setter
Property
=
"IsTabStop"
Value
=
"False"
/>
<
Setter
Property
=
"SnapsToDevicePixels"
Value
=
"True"
/>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"telerikControls:RadButton"
>
<
Grid
x:Name
=
"LayoutRoot"
>
<
telerikChromes:ButtonChrome
telerikControls:StyleManager.Theme
=
"{StaticResource Theme}"
RenderNormal
=
"False"
RenderMouseOver
=
"{TemplateBinding IsMouseOver}"
RenderPressed
=
"{TemplateBinding IsPressed}"
/>
<
Path
x:Name
=
"Icon"
Fill
=
"{StaticResource ButtonIconBrush_Normal}"
Margin
=
"4,4,4,4"
Style
=
"{StaticResource CloseIconStyle}"
/>
</
Grid
>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsMouseOver"
Value
=
"True"
>
<
Setter
TargetName
=
"Icon"
Property
=
"Fill"
Value
=
"{StaticResource ButtonIconBrush_MouseOver}"
/>
</
Trigger
>
<
Trigger
Property
=
"IsPressed"
Value
=
"True"
>
<
Setter
TargetName
=
"Icon"
Property
=
"Fill"
Value
=
"{StaticResource ButtonIconBrush_Pressed}"
/>
</
Trigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
TargetName
=
"Icon"
Property
=
"Fill"
Value
=
"{StaticResource ButtonIconBrush_Disabled}"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
DataTemplate.Resources
>
<
Grid
Background
=
"#00000000"
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"*"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
</
Grid.ColumnDefinitions
>
<
TextBlock
Text
=
"{Binding}"
VerticalAlignment
=
"Center"
TextTrimming
=
"CharacterEllipsis"
TextWrapping
=
"NoWrap"
Height
=
"{Binding ElementName=CloseButton, Path=ActualHeight, Mode=OneWay}"
/>
<
telerikControls:RadButton
x:Name
=
"CloseButton"
Style
=
"{StaticResource PaneHeaderCloseButtonStyle}"
Command
=
"telerikDocking:RadDockingCommands.Close"
CommandParameter
=
"{Binding RelativeSource={RelativeSource AncestorType=telerikDocking:RadPane}, Mode=OneWay}"
Visibility
=
"Hidden"
Margin
=
"5,0,0,0"
Grid.Column
=
"1"
/>
</
Grid
>
<
DataTemplate.Triggers
>
<
DataTrigger
Binding
=
"{Binding Path=CanUserClose, RelativeSource={RelativeSource AncestorType=telerikDocking:RadPane}, Mode=OneWay}"
Value
=
"false"
>
<
Setter
Property
=
"Visibility"
Value
=
"Collapsed"
TargetName
=
"CloseButton"
/>
</
DataTrigger
>
<
MultiDataTrigger
>
<
MultiDataTrigger.Conditions
>
<
Condition
Binding
=
"{Binding Path=CanUserClose, RelativeSource={RelativeSource AncestorType=telerikDocking:RadPane}, Mode=OneWay}"
Value
=
"true"
/>
<
Condition
Binding
=
"{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=telerikDocking:RadPane}, Mode=OneWay}"
Value
=
"true"
/>
</
MultiDataTrigger.Conditions
>
<
Setter
Property
=
"Visibility"
Value
=
"Visible"
TargetName
=
"CloseButton"
/>
</
MultiDataTrigger
>
<
MultiDataTrigger
>
<
MultiDataTrigger.Conditions
>
<
Condition
Binding
=
"{Binding Path=CanUserClose, RelativeSource={RelativeSource AncestorType=telerikDocking:RadPane}, Mode=OneWay}"
Value
=
"true"
/>
<
Condition
Binding
=
"{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}, Mode=OneWay}"
Value
=
"true"
/>
</
MultiDataTrigger.Conditions
>
<
Setter
Property
=
"Visibility"
Value
=
"Visible"
TargetName
=
"CloseButton"
/>
</
MultiDataTrigger
>
</
DataTemplate.Triggers
>
</
DataTemplate
>
<
Style
x:Key
=
"PaneStyle"
TargetType
=
"{x:Type telerikDocking:RadPane}"
>
<
Setter
Property
=
"HeaderTemplate"
Value
=
"{StaticResource PaneHeaderDataTemplate}"
/>
<
Setter
Property
=
"ContextMenuTemplate"
Value
=
"{x:Null}"
/>
</
Style
>
<!-- Default styles applied to all panes and document panes -->
<
Style
TargetType
=
"{x:Type telerikDocking:RadDocumentPane}"
BasedOn
=
"{StaticResource PaneStyle}"
/>
<
Style
TargetType
=
"{x:Type telerikDocking:RadPane}"
BasedOn
=
"{StaticResource PaneStyle}"
/>
</
UserControl.Resources
>
<
telerikDocking:RadDocking
HasDocumentHost
=
"true"
>
<
telerikDocking:RadDocking.DocumentHost
>
<
telerikDocking:RadSplitContainer
InitialPosition
=
"DockedTop"
>
<
telerikDocking:RadPaneGroup
prism:RegionManager.RegionName
=
"{x:Static core:LayoutRegionNames.Document}"
/>
</
telerikDocking:RadSplitContainer
>
</
telerikDocking:RadDocking.DocumentHost
>
<
telerikDocking:RadSplitContainer
InitialPosition
=
"DockedLeft"
>
<
telerikDocking:RadPaneGroup
prism:RegionManager.RegionName
=
"{x:Static core:LayoutRegionNames.Left}"
/>
</
telerikDocking:RadSplitContainer
>
<
telerikDocking:RadSplitContainer
InitialPosition
=
"DockedRight"
>
<
telerikDocking:RadPaneGroup
prism:RegionManager.RegionName
=
"{x:Static core:LayoutRegionNames.Right}"
/>
</
telerikDocking:RadSplitContainer
>
<
telerikDocking:RadSplitContainer
InitialPosition
=
"DockedBottom"
>
<
telerikDocking:RadPaneGroup
prism:RegionManager.RegionName
=
"{x:Static core:LayoutRegionNames.Bottom}"
/>
</
telerikDocking:RadSplitContainer
>
</
telerikDocking:RadDocking
>
</
UserControl
>
Hope this helps.
0
Anders
Top achievements
Rank 1
answered on 27 Jan 2012, 04:40 PM
Better late than never: Thanks! It was the solution I was looking for...