.NET GUI

.NET Community für WPF, Silverlight und mehr!
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Commands disablen Menüitems automatisch

Letzter Beitrag 11-23-2008 17:52 von Norbert Eder. 6 Antworten.
Seite 1 von 1 (7 Treffer)
Beiträge sortieren: Zurück Weiter
  • 11-20-2008 9:24

    • knatterton
    • Top 10 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 81
    • Punkte 1.395

    Commands disablen Menüitems automatisch

    Hallo, ich habe ein Problem mit Commands, dass ich mir nicht erklären kann.

    Ich habe ApplicationCommands an Menüitems gebunden. Allerdings haben meine Menüitems dann ein Eigenleben. Ich öffne normal eine Datenbank. Die Daten werden angezeigt. Jetzt klicke ich in irgend ein Control in meinem UI und schließe die Datenbank wieder. Danach sind die Menüitems für Open und New disabled. STRG+N oder STRG+O funktioniert aber trotzdem noch. Das komische daran ist, dass wenn ich die Datenbank öffne und nicht in irgend ein Control klicke und die Datenbank dann schließe sind die Menüitems enabled. Und ich habe da defenitiv nicht die Finger im Spiel. Ich setze diese Menüitems nicht von Hand auf disable.

    Kann mir da einer helfen? Ich habe die CommandBindings auch schon direkt im <Window.CommandBindings im XAML definiert. Das Ergebnis war das gleiche.

    1
    2
    3
    4
    5
    6
    
    CommandBinding binding = new CommandBinding(ApplicationCommands.New);
          binding.Executed += NewDatabaseCommand_Executed;
          this.CommandBindings.Add(binding);
          binding = new CommandBinding(ApplicationCommands.Open);
          binding.Executed += OpenDatabaseCommand_Executed;
          this.CommandBindings.Add(binding);

     

    1
    2
    
    <MenuItem x:Uid="MenuItem_2" Header="New..." Command="ApplicationCommands.New"/>
        					<MenuItem x:Uid="MenuItem_3" Header="Open..." Command="ApplicationCommands.Open"/>
    Kombiniere...
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-20-2008 12:27 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Commands disablen Menüitems automatisch

    Abonniere das CanExecute-Ereignis und setze dort, wann der Command verfügbar sein soll und wann nicht. Damit kannst du das Verhalten selbst steuern.

    Genauere Informationen was da passiert bekommst du in der MSDN via RoutedCommand.CanExecute.

    Abgelegt unter: , ,
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-21-2008 13:09 Antwort zu

    • knatterton
    • Top 10 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 81
    • Punkte 1.395

    AW: Commands disablen Menüitems automatisch

    CommandBinding bindingNew = new CommandBinding(ApplicationCommands.New);
    
          bindingNew.Executed += NewDatabaseCommand_Executed;
          bindingNew.CanExecute += binding_CanExecute;
          this.CommandBindings.Add(bindingNew);
    
    private void binding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
          if (e.CanExecute == false)
          {
            e.CanExecute = true;
            miNew.IsEnabled = true;
          }
          Trace.WriteLine(e.CanExecute.ToString());
        }
    
    
    
    Wie man sieht habe ich es auch schon mit der Holzhammermethode versucht. Trace gibt mir auch immer zurück, dass das Item ok ist. Aber in der Oberfläche ist es disabled.
    Kombiniere...
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 11-21-2008 13:41 Antwort zu

    • knatterton
    • Top 10 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 81
    • Punkte 1.395

    AW: Commands disablen Menüitems automatisch

    Ich konnte das merkwürdige Verhalten etwas eingrenzen.

    Und zwar habe ich ein Grid in dem mein Content gelagert ist. Beim Close nulle ich meine Controls und mache dann ein contentGrid.Children.Clear()

    Wenn ich diese Zeile weglasse ist das Menü auch wieder aktiv. Wenn ich diese Zeile wieder reinsetze ist das Menü wieder disabled. Was hat mein Grid mit meinem Menü zu tun?????

    Kombiniere...
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-21-2008 14:15 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Commands disablen Menüitems automatisch

    Ist dein Haupt-Grid, oder? Sprich, du hast ein Window und dieses Window enthält auf oberster Ebene ein Grid?

    Normalerweise wird das CommandBinding einem Element zugeordnet. Das machst du auch, aber du setzt es auf this. Dadurch wird das Rootelement deines Windows überprüft. Wenn dieses keinen Content hat, wird der Command disabled.

    Die Frage, die du dir stellen solltest: Wann soll was wirklich aktiv sein und worauf kannst du das CommandBinding hängen damit das der Fall ist? Idealerweise liest du dir auch die Informationen zum CommandBinding genau durch, das sollte weiter helfen, da die MSDN hier schon ganz gute Einblicke liefert.

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-21-2008 14:41 Antwort zu

    • knatterton
    • Top 10 Mitwirkender
    • Registriert am 07-09-2008
    • Beiträge 81
    • Punkte 1.395

    AW: Commands disablen Menüitems automatisch

    Nein das Grid ist nicht meine Hauptgrid. Also das Menü ist nicht in dem Grid enthalten. Ich denke so etwas ähnliches ist auch hier beschrieben:

    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f898ab7f-1282-48bb-a248-7ce1caa05cf6/

    Ich habe meine Items mit foreach durlaufen und setze sie auf Hidden. Keine Ahnung ob das gut ist aber es funktioniert.

    Kombiniere...
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-23-2008 17:52 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 980
    • Punkte 14.949
    • ForumsAdministrator

    AW: Commands disablen Menüitems automatisch

    Was ich meinte: Wie sieht der Aufbau deines Fensters aus?

    <Window ....>
      <Grid>
      ... (Menü, Inhalte etc.)
      </Grid>
    </Window>

    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (7 Treffer)
Powered by Community Server (Commercial Edition)    69° - Internet-Agentur München (CMS, ASP.NET, Webdesign)