Autor Beitrag
boombuler
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 08.05.08 10:11 
Hi,

mir ist folgendes Problem über den Weg gelaufen:
Wenn ich in folgendem Xaml-Code einen Adorner auf das Stackpanel lege und dem Adorner ein Element hinzufüge wie z.B. einen Button und dann auf den Button klicke, wird der "Close"-Button disabled. Wenn ich statt eines RoutedCommands einfach das Click Event registriere funktionierts.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<DockPanel>
    <DockPanel.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Close"
                        CanExecute="CommandBinding_CanExecute"
                        Executed="CommandBinding_Executed" />
    </DockPanel.CommandBindings>
    <ToolBar DockPanel.Dock="Top">
        <Button Command="ApplicationCommands.Close" DockPanel.Dock="Top">Close</Button>
    </ToolBar>
    <StackPanel Name="spAdornMe" />
</DockPanel>



Hat jemand eine Idee dazu?

MfG
Florian


Edit:

Das Problem lässt sich lösen, wenn man von der ToolBar "FocusManager.IsFocusScope" auf "false" setzt.

Grund:
Beim Commandrouting wird die Route für das CanExecuteEvent aufgrund dieser Eigenschaft wie folgt geändert:

Button -> Toolbar -> [Suche nach dem Eltern-Scope: DockPanel -> Window -> AdornerDecorator des Windows] -> AdornerDecorator des Windows -> [Suche nach dem selektierten Element: AdornerLayer -> Adorner -> Element auf dem Adorner] Element auf dem Adorner

Wie man dabei sehen kann hat keins der angesprochenden Ziele ein CommandBinding für das RoutedCommand wodurch CanExecute auf False und Handled auf False gesetzt wird. Dies führt wiederum dazu, dass die OriginalRoute die normalerweise weitergeführt werden würde abgebrochen wird!!!