Posted 16 years ago
by Mike Benson
Version: 4.5.0470
Platform: .NET 3.5
Environment: Windows XP (32-bit)

I have nailed this down to activate / deactivate not firing for windows that either have null content or content that does not normally receive focus.
In my included example, if you click on the ribbon buttons labeled "Open TB.... " You will note that you cannot activate the tabs or the windows by just clicking on them. If you undock them or something along those lines, the activate/deactivate works for that period only.
However, if you click on the ribbon buttons labeled "Open LB...." the activate / deactivate works as expected.
Here is the XAML:Here is the code behind
In my included example, if you click on the ribbon buttons labeled "Open TB.... " You will note that you cannot activate the tabs or the windows by just clicking on them. If you undock them or something along those lines, the activate/deactivate works for that period only.
However, if you click on the ribbon buttons labeled "Open LB...." the activate / deactivate works as expected.
Here is the XAML:
<Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:navigation="http://schemas.actiprosoftware.com/winfx/xaml/navigation"
xmlns:ribbon="http://schemas.actiprosoftware.com/winfx/xaml/ribbon"
xmlns:shared="http://schemas.actiprosoftware.com/winfx/xaml/shared"
xmlns:docking="http://schemas.actiprosoftware.com/winfx/xaml/docking"
xmlns:themes="http://schemas.actiprosoftware.com/winfx/xaml/themes"
Title="Window1" Height="517" Width="559">
<DockPanel x:Name="DockPanel" themes:ThemeManager.Theme="Office2007Blue">
<Grid Visibility="Hidden">
<Grid.RowDefinitions>
<RowDefinition Height="0"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Frame
x:Name="NavigationFrame"
Grid.Row="0"
Grid.Column="0"
Width="0"
Height="0"
Visibility="Hidden"/>
</Grid>
<shared:PixelSnapper DockPanel.Dock="Top">
<ribbon:Ribbon x:Name="RibbonStrip" IsQuickAccessToolBarCustomizationEnabled="True" IsCustomizeQuickAccessToolBarMenuItemVisible="True" >
<ribbon:Ribbon.ContextualTabGroups>
<ribbon:ContextualTabGroup Label="View" Name="View" />
</ribbon:Ribbon.ContextualTabGroups>
<ribbon:Ribbon.ApplicationMenu>
<ribbon:ApplicationMenu />
</ribbon:Ribbon.ApplicationMenu>
<ribbon:Ribbon.LayoutTransform>
<ScaleTransform ScaleX="{Binding ElementName=ribbonDemo, Path=RibbonScale}" ScaleY="{Binding ElementName=ribbonDemo, Path=RibbonScale}" />
</ribbon:Ribbon.LayoutTransform>
<ribbon:Ribbon.TabPanelItems>
<ribbon:Button KeyTipAccessText="Z" Command="ApplicationCommands.Help" Name="Help" Label="Help" />
<UIElement />
</ribbon:Ribbon.TabPanelItems>
<ribbon:Tab Label="Test">
<ribbon:Group Label="Test">
<ribbon:Button Label="Open TB Document" x:Name="OpenTBDocument" Command="ApplicationCommands.Open" CommandParameter="DOC" ></ribbon:Button>
<ribbon:Button Label="Open TB Tool Window" x:Name="OpenTBToolWindow" Command="ApplicationCommands.Open" CommandParameter="TW"></ribbon:Button>
<ribbon:Button Label="Open LB Document" x:Name="OpenLBDocument" Command="ApplicationCommands.Open" CommandParameter="DOC2" ></ribbon:Button>
<ribbon:Button Label="Open LB Tool Window" x:Name="OpenLBToolWindow" Command="ApplicationCommands.Open" CommandParameter="TW2"></ribbon:Button>
</ribbon:Group>
</ribbon:Tab>
</ribbon:Ribbon>
</shared:PixelSnapper>
<shared:PixelSnapper DockPanel.Dock="Bottom" >
<StatusBar x:Name="StatusBar" Padding="0,2,0,0" Style="{DynamicResource {x:Static ribbon:RibbonStyles.StatusBarKey}}" >
<StatusBarItem x:Name="StatusPanelText" Content="Ready" />
</StatusBar>
</shared:PixelSnapper>
<shared:PixelSnapper DockPanel.Dock="Left">
<navigation:NavigationBar
x:Name="Desktop_SideNavigationBar"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="0,0,0,0" IsCustomizationEnabled="False" ContentWidth="150">
</navigation:NavigationBar>
</shared:PixelSnapper>
<docking:DockSite Name="docksite">
<docking:DockSite.AutoHideLeftContainers>
<docking:ToolWindowContainer Name="West_ToolWindowContainer">
</docking:ToolWindowContainer>
<docking:ToolWindowContainer Name="West_West_ToolWindowContainer">
</docking:ToolWindowContainer>
</docking:DockSite.AutoHideLeftContainers>
<docking:DockSite.AutoHideRightContainers>
<docking:ToolWindowContainer Name="East_ToolWindowContainer">
</docking:ToolWindowContainer>
<docking:ToolWindowContainer Name="East_East_ToolWindowContainer">
</docking:ToolWindowContainer>
</docking:DockSite.AutoHideRightContainers>
<docking:SplitContainer >
<docking:SplitContainer Orientation="Vertical">
<docking:Workspace>
<docking:TabbedMdiHost IsCloseButtonOnTab="True" TabPlacement="Top" x:Name="TabbedMdiHost" >
<docking:TabbedMdiContainer x:Name="NavigationTab" >
</docking:TabbedMdiContainer>
</docking:TabbedMdiHost>
</docking:Workspace>
<docking:ToolWindowContainer Name="South_South_ToolWindowContainer">
<docking:ToolWindow x:Name="outputToolWindow" Title="Output" CanClose="false" >
<ListBox x:Name="eventsListBox" BorderThickness="0" />
</docking:ToolWindow>
</docking:ToolWindowContainer>
</docking:SplitContainer>
<docking:ToolWindowContainer Name="South_East_ToolWindowContainer">
</docking:ToolWindowContainer>
</docking:SplitContainer>
</docking:DockSite>
</DockPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ActiproSoftware.Windows.Controls.Docking;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, this.OpenExecuted, this.OpenCanExecute));
docksite.WindowActivated += new EventHandler<DockingWindowEventArgs>(docksite_WindowActivated);
docksite.WindowDeactivated += new EventHandler<DockingWindowEventArgs>(docksite_WindowDeactivated);
docksite.WindowOpened += new EventHandler<DockingWindowEventArgs>(docksite_WindowOpened);
docksite.WindowClosing += new EventHandler<DockingWindowEventArgs>(docksite_WindowClosing);
docksite.WindowOpening += new EventHandler<DockingWindowEventArgs>(docksite_WindowOpening);
}
void docksite_WindowOpening(object sender, DockingWindowEventArgs e)
{
this.AppendMessage(String.Format("Window Opening: Name={0}", e.Window.Title));
}
void docksite_WindowClosing(object sender, DockingWindowEventArgs e)
{
this.AppendMessage(String.Format("Window Closing: Name={0}", e.Window.Title));
}
void docksite_WindowOpened(object sender, DockingWindowEventArgs e)
{
this.AppendMessage(String.Format("Window Opened: Name={0}", e.Window.Title));
}
void docksite_WindowDeactivated(object sender, DockingWindowEventArgs e)
{
this.AppendMessage(String.Format("Window Deactivated: Name={0}", e.Window.Title));
}
void docksite_WindowActivated(object sender, DockingWindowEventArgs e)
{
this.AppendMessage(String.Format("Window Activated: Name={0}", e.Window.Title));
}
private int windownum = 0;
private void OpenExecuted(object target, ExecutedRoutedEventArgs e)
{
try
{
int wn = windownum++;
if (string.Equals(e.Parameter, "TW"))
{
ToolWindow tw = new ToolWindow(this.docksite, "TW" + wn, "Toolwindow" + wn, null, new TextBlock());
tw.Dock(this.docksite, Direction.Bottom);
tw.Activate();
}
else if (string.Equals(e.Parameter, "DOC"))
{
DocumentWindow dw = new DocumentWindow(this.docksite, "DOC" + wn, "Document" + wn, null, new TextBlock());
dw.Activate();
}
if (string.Equals(e.Parameter, "TW2"))
{
ToolWindow tw = new ToolWindow(this.docksite, "TW" + wn, "Toolwindow" + wn, null, new ListBox());
tw.Dock(this.docksite, Direction.Bottom);
tw.Activate();
}
else if (string.Equals(e.Parameter, "DOC2"))
{
DocumentWindow dw = new DocumentWindow(this.docksite, "DOC" + wn, "Document" + wn, null, new ListBox());
dw.Activate();
}
}
catch (Exception)
{
throw;
}
}
private void OpenCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void AppendMessage(string text)
{
ListBoxItem item = new ListBoxItem();
item.Content = text;
eventsListBox.Items.Add(item);
eventsListBox.SelectedItem = item;
eventsListBox.ScrollIntoView(item);
}
}
}