Autor Beitrag
Fritziiiii
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 25.10.15 21:10 
Hi,

ich hab ein kleines Proble beim Binden der Hintergrundfarbe. Binde ich die Farbe im Quellcode, klappt die Zuweisung ganz gut. Versuche ich die Bindung im XAML-Teil, bekomme ich keine Farbe angezeigt.
(noch zur Info, die Farbe wird bei jedem MouseMove aktualisiert).

Im Konstruktor hab ich die Hintergrundfarbe auf Pink (255,0,255) gesetzt, diese wird auch dargestellt. Aber sobald ich das MouseMove auslöse, habe ich keine Hintergrundfarbe mehr.
"auswahl" ist die Methode, welche die Hintergrundfarbe bereitstellt.

Hoffe, irgendjemand kann mir weiterhelfen.

Gruß
Fritziiiii


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
class aktuelleFarbe : INotifyPropertyChanged {
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null) PropertyChanged(this, e);
        }

        private Color _aktVT;
        public Color aktVT
        {
            get { return _aktVT; }
            set { _aktVT = value; }
        }

        private Color _auswahl;
        public Color auswahl
        {
            get { return _auswahl; }
            set
            {
                _auswahl = value;
                OnPropertyChanged(new PropertyChangedEventArgs("auswahl"));
            }
        }
       
        private string _test;
        public string test
        {
            get { return _test; }
            set { _test = value;
                OnPropertyChanged(new PropertyChangedEventArgs("test"));
            }
        }

        public aktuelleFarbe(byte r, byte g, byte b)
        {
            
           aktVT = Color.FromRgb(r, g, b);
           auswahl =  Color.FromRgb(255,0,255);
           
           test = "blub";

        }
    }


    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

       
        aktuelleFarbe Farbe = new aktuelleFarbe(255,255,0);


        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = Farbe;

        }
.
.
.
.




 private void Rectangle_MouseMove(object sender, MouseEventArgs e)
        {

            SolidColorBrush test = new SolidColorBrush();
            
            Rectangle Rect = (Rectangle)sender;
            Color Vollton = new Color();
            Vollton.R = 255; Vollton.G = 255; Vollton.B = 0;
            System.Windows.Point position = e.GetPosition(Grid1);
          
            Farbe.auswahl = FarbeBerechnen(position.X , position.Y, Vollton, Rect.Width, Rect.Height);
                     
            test.Color = Color.FromRgb(Farbe.auswahl.R, Farbe.auswahl.G, Farbe.auswahl.B);
            labelY.Background = test;  // Zeile wird bei Bindung im XAML-Teil auskommentiert
          
        }


Für die Bindung im XAML-Teil hab ich mal zwei Versuche gemacht, aber beide ohne Erfolg.
Versuch 1:
ausblenden C#-Quelltext
1:
 <Label x:Name="labelY" Content="{Binding Path=test}" HorizontalAlignment="Left" Margin="327,230,0,0" VerticalAlignment="Top" Background="{Binding Path=auswahl}"/>					


Versuch 2:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
<Label x:Name="labelY" Content="{Binding Path=test}" HorizontalAlignment="Left" Margin="327,230,0,0" VerticalAlignment="Top">
            <Label.Background>
                <SolidColorBrush Color="{Binding Path=auswahl}"/>
            </Label.Background>
        </Label>
Fritziiiii Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 26.10.15 18:35 
Hi,

habe das Problem jetzt lösen können:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public Color auswahl
{
    get { return Color.FromRgb(_auswahl.R,_auswahl.G,_auswahl.B); }
    set
    {             
         _auswahl = value;
         test = String.Format("R{0}#G{1}#B{2}",_auswahl.R,_auswahl.G,_auswahl.B);
         OnPropertyChanged(new PropertyChangedEventArgs("auswahl"));
    }
}

Nur verstehen tu ich es nicht:

bisher hab ich mit get { return _auswahl; } die Farbe zurückgegeben. _auswahl ist ja vom Typ Color.
Nun erzeuge ich mithilfe von get { return Color.FromRgb(_auswahl.R,_auswahl.G,_auswahl.B); } aus den RGB-Werten eine "neue" Farbe und gebe diese zurück. Und schon klappt es. Warum hat mein bisheriger Ansatz nicht funktioniert?????

Gruß
Fritziiiii

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 26.10.15 19:50 
Dein Code in MouseMove funzt so nicht weil du den Alphakanal nicht setzt. Vollton ist so zu 100% transparent. Entweder du benutzt für Vollton auch Color.FromRgb das setzt den Alphakanal auch auf 255 oder du setzt Vollton.A selbst.
Ich kann es deinem Code jetzt nicht ansehen aber ich vermute bei deiner auswahl Property liegt ein ähnliches Problem vor. Zumindest würde deine Lösung dafür sprechen.

Nebenbei Properties, Methoden und alle anderen öffentlichen Dinge einer Klasse schreibt man Groß. Deine Schreibweise sieht für die meisten hier vermutlich, genauso wie für mich, nach Fremdkörper aus da wir so erstmal öffentliches für privates halten und so durcheinander kommen.
Es mag nur eine Kleinigkeit sein diese Standards sind aber hilfreich insbesondere für potentielle Helfer wenn man sich daran hält.

Für diesen Beitrag haben gedankt: Fritziiiii