hitman4021
Goto Top

WPF und C-Sharp Binding a Variable

Hallo, ich habe vor kurzem beschlossen mir mal wider was neues anzuschauen(C# und WPF). Doch nun stehe ich schon vor einem Problem das ich leider nicht selbst lösen kann.

Ich möchte aus dem Registry Key: HKEY_Current_User\Software\Car\ den Wert des Schlüssels "MARKE_IMAGE" auslesen und diesen Pfad im XAML als Pfad zu einem Bild verwenden. Allerdings bekomme ich statt des Bildes nur eine leere Stelle. Ich denke mein Problem liegt irgendwo beim übergeben an IMAGE_NAME. Ich hoffe irgendwer kann mir hier etwas weiterhelfen.

page1.xaml.cs
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;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    ViewAndModify = "HKEY_CURRENT_USER")]  

namespace TEST_0_1
{
    public partial class TEST : Page
    {    
public class IMAGE
    {
        private string _IMAGE;       
        public string GET_IMAGE()
        {
            RegistryKey rk =
            Registry.CurrentUser.OpenSubKey
            (@"Software\CAR");  
            string GET_IMAGE = (string)rk.GetValue("MARKE_IMAGE");  
            rk.Close();
            return _IMAGE;
        }

        public string IMAGE_NAME
        {
            get { return _IMAGE; }
            set { _IMAGE = value; }
        }
    }
}

page1.caml
<Page x:Class="TEST_0_1.TEST"  
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
      xmlns:my="clr-namespace:TEST_0_1"  
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"   
      mc:Ignorable="d"   
      d:DesignHeight="480" d:DesignWidth="640"  
      Title="Home">  
        <Grid x:Name="LayoutRoot" HorizontalAlignment="Center" VerticalAlignment="Center" Width="640" Height="480">  
        <Grid.Resources>
            <my:IMAGE x:Key="myIMAGE" IMAGE_NAME="Spot"/>  
        </Grid.Resources>
            <Image HorizontalAlignment="Right" Margin="0,115,70,115" Width="200" Height="200" Source="{Binding IMAGE_NAME, Mode=Default}" DataContext="{StaticResource MyIMAGE}" Stretch="Fill"/>  
        </Grid>

Was mache ich hier falsch?

Danke schonmal für die Hilfe

mfg

Content-ID: 183624

Url: https://administrator.de/contentid/183624

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

SlainteMhath
SlainteMhath 17.04.2012 um 09:49:34 Uhr
Goto Top
Moin,

[...]
string GET_IMAGE = (string)rk.GetValue("MARKE_IMAGE");   
[...]
return _IMAGE; 
[...]

Na, findest Du den Fehler? face-smile
Hitman4021
Hitman4021 17.04.2012 um 10:07:51 Uhr
Goto Top
Hallo,

Okay das habe ich hier jetzt geändert.
    public class IMAGE
    {
        private string _IMAGE;       
        public string GET_IMAGE()
        {
            RegistryKey rk =
            Registry.CurrentUser.OpenSubKey
            (@"Software\CAR");  
            string _IMAGE = (string)rk.GetValue("MARKE_IMAGE");  
            rk.Close();
            return _IMAGE;
        }   

        public string IMAGE_NAME
        {
            get { return _IMAGE; }
            set { _IMAGE = value; }
        }
    }

Aber anscheinend habe ich noch irgendwo einen Fehler?
Die Stelle wo das Bild sein sollte ist noch immer leer?

[EDIT]
Wird die Seite aufgebaut bevor der C# Code ausgewertet wird?
bzw. Ist die Variable beim Aufbau der Seite noch leer?
Ist das möglich?
[/EDIT]

mfg
masterofavenger
masterofavenger 17.04.2012 um 15:00:57 Uhr
Goto Top
Hallo,

ich denke das Du den falschen Datentyp in die Source steckst.

Lt. meinen Erfahrungen solltest Du eine ImageSource verwenden, dann sollte es klappen... face-smile
Hitman4021
Hitman4021 17.04.2012 um 18:40:58 Uhr
Goto Top
Hallo,

leider nein, ich habe jetzt statt string ImageSource verwendet aber ich bekomme noch immer kein Bild.

Ich poste hier mal den gesamten Code der 2 Seiten. Vl liegt der Fehler ja ganz woanders?
Ich komme leider echt nicht mehr weiter :/

MENÜ.xaml
<Page x:Class="MENUE.TEST"  
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
      xmlns:my="clr-namespace:MENUE"  
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"   
      mc:Ignorable="d"   
      d:DesignHeight="480" d:DesignWidth="640"  
	Title="MENÜ - Home">  
    
        <Grid x:Name="LayoutRoot" HorizontalAlignment="Center" VerticalAlignment="Center" Width="640" Height="480">  
        <Grid.Resources>
            <my:IMAGE x:Key="myIMAGE" IMAGE_NAME="Spot"/>  
        </Grid.Resources>
        <Grid.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">  
                    <GradientStop Color="Black" Offset="0"/>  
                    <GradientStop Color="White" Offset="1"/>  
                </LinearGradientBrush>
            </Grid.Background>
            <GridSplitter HorizontalAlignment="Stretch" Margin="0,0,8,0" Width="640" Height="480">  
                <GridSplitter.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">  
                        <GradientStop Color="Black" Offset="0"/>  
                        <GradientStop Color="White" Offset="1"/>  
                    </LinearGradientBrush>
                </GridSplitter.Background>
            </GridSplitter>
            <Button x:Name="Car_Info" HorizontalAlignment="Left" Margin="50,50,0,0" VerticalAlignment="Top" Width="150" Height="50" Content="Car Info"/>  
            <Button x:Name="Navigation" HorizontalAlignment="Left" Margin="50,150,0,0" VerticalAlignment="Top" Width="150" Height="50" Content="Navigation"/>  
            <Button x:Name="MP3_Play" HorizontalAlignment="Left" Margin="50,250,0,0" VerticalAlignment="Top" Width="150" Height="50" Content="MP3 Player"/>  
            <Button x:Name="Settings" HorizontalAlignment="Left" Margin="50,350,0,0" VerticalAlignment="Top" Width="150" Height="50" Content="Settings"/>  
            <Image HorizontalAlignment="Right" Margin="0,115,70,115" Width="200" Height="200" Source="{Binding IMAGE_NAME, Mode=Default}" Stretch="Fill"/>  
    </Grid>
</Page>

MENÜ.xaml.cs
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;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    ViewAndModify = "HKEY_CURRENT_USER")]  

namespace MENUE
{
    public partial class TEST : Page{
    
        public TEST()
        {
            this.InitializeComponent();
            Car_Info.Click += new RoutedEventHandler(Car_Info_Click);
            Navigation.Click += new RoutedEventHandler(Navigation_Click);
            MP3_Play.Click += new RoutedEventHandler(MP3_Play_Click);
            Settings.Click += new RoutedEventHandler(Settings_Click);
        }

        // Funktionen der Knöpfe
        void Car_Info_Click(object sender, RoutedEventArgs e)
        {
            this.NavigationService.Navigate(new Uri("SITE.xaml", UriKind.Relative));  
        }

        void MP3_Play_Click(object sender, RoutedEventArgs e)
        {
            throw new NotImplementedException();
        }

        void Navigation_Click(object sender, RoutedEventArgs e)
        {
            throw new NotImplementedException();
        }
        void Settings_Click(object sender, RoutedEventArgs e)
        {
            this.NavigationService.Navigate(new Uri("./Settings/Settings_Main.xaml", UriKind.Relative));  
        }
    }

        public class IMAGE
    {
        private ImageSource _IMAGE;
        public ImageSource GET_IMAGE()
        {
            RegistryKey rk =
            Registry.CurrentUser.OpenSubKey
            (@"Software\CAR");  
            ImageSource _IMAGE = (ImageSource)rk.GetValue("MARKE_IMAGE");  
            rk.Close();
            return _IMAGE;
        }

        public ImageSource IMAGE_NAME
        {
            get { return _IMAGE; }
            set { _IMAGE = value; }
        }
    }
}

Hat jemand eine Idee was ich hier falsch mache?

Gruß
Hitman