środa, kwiecień 14, 2010

Visual Studio 2010 Community Launch we Wrocławiu

Zapraszamy na



Visual Studio 2010 Community Launch to cykl konferencji, które odbęda się w największych miastach Polski podczas których to zostaną zaprezentowane nowości z świeżo wydanego Visual Studio w wersji 2010 oraz najnowszego .NET Framework 4.

Już 24 kwietnia (sobota) w Instytucie Informatyki UWr przy ul. Juliot-Curie 15
odbędzie się pierwsze spotkanie z tego cyklu. Podczas 5 sesji tematycznych zostanie zaprezentowany bardzo szeroki wachlarz nowości, od ogólnego pokazania 'co nowego' poprzez najnowsze zmiany w języku C# a skończywszy na programowaniu równoleglym i IntelliTrace'ie.

Więcej informacji o wydarzeniu jak i agendę można znaleźć na stronie: http://ms-groups.pl/vs2010cl/Strony/VS2010CL_Wroclaw.aspx
Wsród uczestników spotkania podczas konferencji zostaną rozlosowane nagrody.

Wydarzenie jest bezpłatne lecz wymagana jest wczesniejsza rejestracja. Liczba miejsc jest ograniczona.

Serdecznie zapraszamy do udziału,
Wrocławska Grupa .NET

Dopisano: Plakat promujący wydarzenie w formacie DeepZoom - VS 2010 CL we Wrocławiu

niedziela, kwiecień 11, 2010

WPF – Ku pamięci – ContextMenu & Commands

Kolejny post ‘ku pamięci’, abym w przyszłości nie musiał tego szukać.

Bawiłem się ostatnio przyciskiem, który ma pokazywać ContextMenu po naciśnięciu przycisku. Kod wyglądał (mniej więcej) następująco:

<Button Content="ContextMenu" Click="Button_Click">                           

    <Button.ContextMenu>

        <ContextMenu x:Name="menu">

            <MenuItem Header="Item 1" Command="ApplicationCommands.Close" />

            <MenuItem Header="Item 2" Command="ApplicationCommands.Open" />

        </ContextMenu>

    </Button.ContextMenu>

</Button>

Jak widać wykorzystuję Commands. Automatyczne pojawianie się ContextMenu po przyciśnięciu prawego przycisku działało bez problemu, tak więc nie spodziewałem się problemów z kodem poniżej:

private void Button_Click(object sender, RoutedEventArgs e)

{

    menu.IsOpen = true;

}

Jednak ku mojemu zdziwieniu tak o to wyglądało menu:cm

I oczywiście CanExecute zawsze ustawiało e.CanExecute = true.

Co się zatem dzieje, że to nie działa? Okazuje się, że samo pokazanie nie sprawdza czy dane polecenie może być wykonane czy nie. Należy wykonać dodatkową operację już po pokazaniu menu. Zatem poprawnie należy to zrobić w następujący sposób:

private void Button_Click(object sender, RoutedEventArgs e)

{

    menu.IsOpen = true;

    CommandManager.InvalidateRequerySuggested();

}

Rozwiązanie, znalezione na MSDN – ContextMenu – Command and sharing across controls. Może komuś zaoszczędzi to trochę czasu.

Dopisano: Wygląda, że się trochę pośpieszyłem. Wywołanie tej instrukcji powoduje wykonanie CanExecute, tylko w jakichś szczególnych sytuacjach?
Ktoś wie jak temu zaradzić?

Wygląda na to, że działa danie zwykłego prostego Focus() w konstruktorze okna zaraz po InitializeComponents().