mouseover wpf

Status
Niet open voor verdere reacties.

grizzlybeer

Gebruiker
Lid geworden
30 jan 2007
Berichten
58
Ik wil graag als je met de muis over een plaatje ( misschien een plaatje in een button) gaat er dan een ander plaatje op het scherm verschijnt en als je dan de muis weer verplaatst dit plaatje verdwijnt.

Ook zou ik ditzelfde willen proberen, maar dan niet met een nieuw plaatje, maar met een window die hij even laat zien tot je muis weer weg is.
 
Voeg in je XAML file bij je image twee events toe :
de MouseEnter en MouseLeave Event
Code:
 <Image Name="image1" Source="Images/Prostraemer_IP_0608.jpg"MouseEnter="image1_MouseEnter" MouseLeave="image1_MouseLeave" />

Vervolgens ga je naar je C# code en maak de volgende twee functies:

Code:
        private void image1_MouseEnter(object sender, MouseEventArgs e)
        {
            string ImagesPathCloud = "images\\cloudsymbol.jpg";
            Uri uriCloud = new Uri(ImagesPathCloud, UriKind.RelativeOrAbsolute);
            BitmapImage bitmapCloud = new BitmapImage(uriCloud);
            image1.Source = bitmapCloud;
        }

        private void image1_MouseLeave(object sender, MouseEventArgs e)
        {
            string ImagesPathCloud = "images\\Prostraemer_IP_0608.jpg";
            Uri uriCloud = new Uri(ImagesPathCloud, UriKind.RelativeOrAbsolute);
            BitmapImage bitmapCloud = new BitmapImage(uriCloud);
            image1.Source = bitmapCloud;
        }

Op deze wijze ga je de ene image zien als je met de muis erover gaat, en een andere als je de muis terug verwijderd van de image.
 
fout

Dat ziet er goed uit, maar helaas het werkt niet bij mij. Ik zie iets over het hoofd denk ik.

Ik heb in de solution explorer een map images aangemaakt. En met verkenner de plaatjes a1.jpg en a2.jpg in die directory gezet,

Echter de code geeft dan als fout

Error 1 Value 'images\\a2.jpg' cannot be assigned to property 'Source'. Value does not fall within the expected range.


Toen heb ik in de xaml file het pad naar het plaatje hard gezet dus c:\....\a1.jpg ergens anders op mijn schijf

Als je hem dan runt dan geeft hij wel het plaatje, maar als ik met mijn muis erover gaat is het plaatje weg en laat hij verder niks zien.

wat doe ik fout of wat moet ik nog doen
 
Je moet in ieder geval vanuit de solution explorer de images toevoegen aan je map images (Rechtermuis klik op de folder images -> add existing item). Op deze manier voegt visual studio zelf de images toe aan de map images.

Op deze manier zou je toch je images moeten zien als dan als source kiest voor images\a.jpg

Wat je ander probleem betreft, kun je eens laten zien wat je nu hebt van code?
 
lukt niet

Hij doet het nu, geweldig. Thankx.

Kun je het nu ook zo doen dat je ipv een plaatje een window tijdelijk getoond krijgt en als je muis weer weg gaat het window weer weg gaat( gesloten) wordt.
 
Laatst bewerkt:
Als je dit effect bijvoorbeeld wil hebben als je met de muis over een button gaat, denk ik dat je beter gebruik maakt van een tooltip. Je kunt dan iets dergelijks doen :
Code:
<Button Name="btnTest">
<Button.ToolTip>
         <Image Name="image2" Source="images\a.jpg"></Image>
</Button.ToolTip>
</Button>

Op deze manier verschijnt de image van het ogenblik dat je met de muis over de button gaat en verdwijnt dan terug.
 
simpel en goed

Dat werkt ook prima, simpel en goed.
thankx.
ps kun je de grootte van de te tonen plaatjes ook meegeven??

Kan je in de tooltip ook een methode aanroepen voor het showen van een window?
 
Als je echt een window wil openen zou toch gebruik maken van de methodes MouseEnter en MouseLeave. Je zou dan eventueel het volgende kunnen doen :

Code:
Window frmTest = new Window();

pivate void btnTest_MouseEnter(object sender, MouseEventArgs e)
{
    frmTest.show();
}

private void btnTest_MouseLeave(object sender, MouseEventArgs e)
{
    frmTest.close();
}
 
waar in de code

Ik heb in de xml een button aangemaakt met de naam btnTest
en de code die jij geeft heb ik geprobeerd in de c# code te plaatsen, maar dan krijg ik allemaal foutmeldingen, waar moet ik deze code plaasten na InitializeComponent();
}
of juist ervoor????
Hij zegt oa bij mij invalid token void in class struct or interface member declaration
en ook
methode must have a return type
 
verwijzen naar een bestaande window

Bedankt voor je hulp. Alleen open jij een nieuwe window en mijn bedoeling is eigenlijk dat als ik over een plaatje ga of over een button dat ik een bestaande window even laat zien.
 
gedeeltelijk opgelost

In mijn eerste reactie kwam de foutmelding doordat er staat pivat ipv privat in de code.
Nu ik dat veranderd heb krijg ik de volgende foutmeling

Error 1 'System.Windows.Window' does not contain a definition for 'show' and no extension method 'show' accepting a first argument of type 'System.Windows.Window' could be found (are you missing a using directive or an assembly reference?) C:\oefen projecten wpf\scherm\test\Window1.xaml.cs 37 13 test

en

Error 2 'System.Windows.Window' does not contain a definition for 'close' and no extension method 'close' accepting a first argument of type 'System.Windows.Window' could be found (are you missing a using directive or an assembly reference?) C:\oefen projecten wpf\scherm\test\Window1.xaml.cs 42 13 test



als c# code staat er bij mij nu
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;



namespace test
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}

private void button1_Click(object sender, RoutedEventArgs e)
{

}
Window frmTest = new Window();

private void btnTest_MouseEnter(object sender, MouseEventArgs e)
{
frmTest.show();
}

private void btnTest_MouseLeave(object sender, MouseEventArgs e)
{
frmTest.close();
}
}
}


en in de xml

<Window x:Class="test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Button Margin="72,109,131,130" Name="btnTest" Click="button1_Click">Button</Button>
</Grid>
</Window>
 
Je moet wel eerst een nieuw window aan je project toevoegen. In dit geval een window met de layout die je wil displayen als je over een knop gaat. Dus in de solution explorer een window toevoegen bijvoorbeeld met de naam DisplayWindow.

In je Window waar je knop op staat ga je dan een instantie van je nieuwe window maken
Code:
DisplayWindow frmDisplayWindow = new DisplayWindow();

Dan kun je deze window gaan openen en sluiten in de MouseEnter en MouseLeave events

Je moet ook wel nog je events toevoegen in je XAML code
Code:
<Button Margin="72,109,131,130" Name="btnTest" Click="button1_Click" MouseEnter="btnTest_MouseEnter" MouseLeave="btnTest_MouseLeave">Button</Button>
 
Laatst bewerkt:
Gaaf, alleen de eerste keer dat je over de button gaat gaat hij goed, maar de tweede keer geeft hij als foutmelding Cannot call show or showdialog after window has closed
 
probeer eens het volgende:
Code:
DisplayNewWindow frmNewWindow;

private void btnTest_MouseEnter(object sender, MouseEventArgs e)
{
   //Maak een nieuwe instantie van je window en open het
   frmNewWindow = new DisplayNewWindow();
   frmNewWindow.Show();
}

private void btnTest_MouseLeave(object sender, MouseEventArgs e)
{
    //Sluit de window
    frmNewWindow.Close();
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan