Routed Events travel along the visual tree. A top-level window is a visual tree root and is not part of its owner's visual tree. Therefore, any events which bubble up from within a child window will not propagate up to the owner window.
As an aside, I noticed a couple issues in your example code. In your xaml, you register a handler with attached event syntax, but you have declared an instance event. If you want to implement an attached event, you will need these members:
public static readonly RoutedEvent ButtonClickedEvent = EventManager.RegisterCrossWindowRoutedEvent(
"ButtonClicked",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(ChildWindow));
public static void AddButtonClickedHandler(UIElement target, RoutedEventHandler handler)
{
target.AddHandler(ButtonClickedEvent, handler);
}
public static void RemoveButtonClickedHandler(UIElement target, RoutedEventHandler handler)
{
target.RemoveHandler(ButtonClickedEvent, handler);
}
If you intended to have an instance event, the event name should correspond with the name provided when registering the routed event ("ButtonClicked").