none
Systemfarben und Durchsichtigkeit eines Win7/Vista Themes auslesen RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte einer Panel welches auf einer transparenten Form liegt gerne die Systemfarbe für ein aktives Fenster geben und die Durchsichtigkeit welche im System eingestellt ist möchte ich auch auslesen. Leider wird mir bei Background nicht wie in Windowsforms die Systemfarben zur Auswahl mit angeboten. Frage wie komm ich zu meinem Ziel. Muss ich eventuell die Registry dazu auslesen oder stellt mir WPF etwas zu zur Verfühgung.

    Danke und Gruß Dieter

    Dienstag, 8. Juni 2010 17:11

Antworten

  • Hi Dieter,

    Klaus hat eigentlich nur den falschen Link erwischt, denn die SystemColors gibt's sowohl in System.Drawing also auch in System.Windows. Hier der Link auf System.Windows . Die verwendbaren Namen findest Du übrigens hier .

    Darüber hinaus ist die von Klaus gezeigte Syntax korrekt, allerdings bekommst Du einen Fehler, weil Du versuchst, eine Color zuzuweisen, obwohl die Background-prop des StackPanels einen Brush erwartet. Das wiederum könntest Du umschiffen, indem Du eine Resource erzeugst, die aus der Systemfarbe einen Brush erzeugt und diese Resource dann wiederum in Deinem StackPanel verwendest. Etwas á la ...

    <Window.Resources>
      <SolidColorBrush x:Key="sb" Color="{DynamicResource {x:Static SystemColors.ActiveBorderColorKey}}"/>
    </Window.Resources>
    <StackPanel Background="{DynamicResource sb}" Width="100" Height="100" />
    


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Mittwoch, 9. Juni 2010 13:57
  • ... ganz vergessen: Alternativ kannst Du das natürlich auch direkt im StackPanel hinterlegen:

    <StackPanel Width="100" Height="100">
      <StackPanel.Background>
       <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ActiveBorderColorKey}}"/>
      </StackPanel.Background>
    </StackPanel>
    


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Mittwoch, 9. Juni 2010 13:59

Alle Antworten

  • Hallo Dieter,

    Probiers doch mal mit der SystemColors Klasse:

    http://msdn.microsoft.com/de-de/library/system.drawing.systemcolors_members.aspx

    da gibt es auch ein Farbe mit Namen Window .

    Kannst auch übrigens in WPF drauf binden:

    Color="{DynamicResource {x:Static SystemColors.ActiveCaptionColorKey}}"
    DynamicResource damit sich die Farbe ändert, wenn du während dein Programm läuft die Systemfarbe änderst.

    Gruß

        Klaus

    Dienstag, 8. Juni 2010 17:27
  • hallo Klaus,

    System.Drawing steht mir scheinbar nur in WindowsForms zu Verfühgung in WPF läst sich der Namespaces nicht im Codebehind importieren. Auch habe ich es in der XAML zum Fenster folgendes probiert,

    <StackPanel x:Name="IconPanel" Grid.ColumnSpan="2" Opacity="0" HorizontalAlignment="Right" VerticalAlignment="Top" Width="20" Height="50" Background="{DynamicResource {x:Static SystemColors.ActiveCaptionColorKey}}" />

    es wurde mir zur Entwicklungzeit kein Fehler angezeigt aber sobald ich die Application startet hatte, wurde sie mit Fehler angehalten. Ich vermute mal, dass da etwas mit den Typen nicht stimmt. Background ist vom Typ Brusches und Systemcolors vom Typ Color. Kanst du mir da noch weiterhelfen?

    Für die Durchsichtigkeit habe ich noch keine Lösung im Netz gefunden.

    Danke und Gruß Dieter

    Mittwoch, 9. Juni 2010 13:35
  • Hi Dieter,

    Klaus hat eigentlich nur den falschen Link erwischt, denn die SystemColors gibt's sowohl in System.Drawing also auch in System.Windows. Hier der Link auf System.Windows . Die verwendbaren Namen findest Du übrigens hier .

    Darüber hinaus ist die von Klaus gezeigte Syntax korrekt, allerdings bekommst Du einen Fehler, weil Du versuchst, eine Color zuzuweisen, obwohl die Background-prop des StackPanels einen Brush erwartet. Das wiederum könntest Du umschiffen, indem Du eine Resource erzeugst, die aus der Systemfarbe einen Brush erzeugt und diese Resource dann wiederum in Deinem StackPanel verwendest. Etwas á la ...

    <Window.Resources>
      <SolidColorBrush x:Key="sb" Color="{DynamicResource {x:Static SystemColors.ActiveBorderColorKey}}"/>
    </Window.Resources>
    <StackPanel Background="{DynamicResource sb}" Width="100" Height="100" />
    


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Mittwoch, 9. Juni 2010 13:57
  • ... ganz vergessen: Alternativ kannst Du das natürlich auch direkt im StackPanel hinterlegen:

    <StackPanel Width="100" Height="100">
      <StackPanel.Background>
       <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ActiveBorderColorKey}}"/>
      </StackPanel.Background>
    </StackPanel>
    


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Mittwoch, 9. Juni 2010 13:59
  • Hi Olaf,

    danke für die schnelle Antwort, hat jetzt geklappt. Hast du auch eine Lösung für die Durchsichtigkeit welche man bei den Win7 Themen einstellen kann.

    Gruß Dieter

    Mittwoch, 9. Juni 2010 14:35
  • Hi Dieter,

    Hast du auch eine Lösung für die Durchsichtigkeit welche man bei den Win7 Themen einstellen kann.

    sorry, da habe ich nicht die geringste Ahnung ...


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Mittwoch, 9. Juni 2010 15:18
  • Hallo Olaf,

    dass ich diesen Satz von dir jemals zum Lesen bekommen würde hätte ich nicht gedacht. Macht aber nichts, trotzdem Danke.

    Ich lass diesen Thread noch ein zwei Tagte offen, vielleicht hat doch noch jemand eine Lösung?

    Gruß Dieter

    Donnerstag, 10. Juni 2010 16:06
  • Hi Dieter,

    Du glaubst gar nicht, von wievielen Dingen ich absolut keine Ahnung habe! :-P

    In diesem Fall liegt das schon ganz allein daran, dass ich immer noch keine Zeit (und Lust) gefunden habe, mal endlich einen neuen Rechner zu besorgen, auf den dann Win7 + VS2010 aufzuspielen wären; habe selbst Vista nur auf ein paar VMs ...


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Donnerstag, 10. Juni 2010 18:02