Problem mit Farben in Menus bei Dark-Mode

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Dideldum.

    Problem mit Farben in Menus bei Dark-Mode

    Hallo Freunde,

    ich versuche schon seit Tagen, die Farben der Menus für den Darkmode in meiner App hinzufummeln.
    Hierzu kann der User in den App-Einstellungen u.a. für die Menus die gewünschte Schriftart, Schriftgrösse, Schriftfarbe und Hintergrundfarbe definieren.
    Leider bekomme ich das aber nicht so hin, wie gewünscht.

    Im ersten Bild seht Ihr eines der Kontextmenus meiner App. In jeder der Mains dieser Kontextmenus sieht es genau so aus, wie ich es haben will.
    Also die Symbole vor Color.control Hintergrundfarbe, die Menupunkte in der gewählten Schriftart, -grösse und -farbe vor der gewählten Hintergrundfarbe, die Separatoren in grau vor der gewählten Hintergrundfarbe.

    Leider bekomme ich das nur für die Mains der Kontextmenus hin.
    Obwohl ich die Eigenschaften der Menupunkte m.E. alle identisch zugewiesen habe, zeigen die Mainmenus der Anwendung und der integrierten Editoren sowie die Submenus aller Kontextmenus aber die Symbole vor der gewählten Menu-Hintergrundfarbe und den Separatoren fehlt die, den Menus zugewiesene Hintergrundfarbe.

    Kann mir da vielleicht jemand von Euch helfen, hier Ordnung reinzubringen und alle Menus identisch aussehen zu lassen?

    Wünsche einen schönen Rest-Sonntag @all
    Bilder
    • Menu-Problem1.jpg

      352,59 kB, 1.920×1.200, 63 mal angesehen
    • Menu-Problem0.jpg

      353,91 kB, 1.920×1.194, 62 mal angesehen
    Habs hinbekommen:

    VB.NET-Quellcode

    1. Private Sub Mainform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. ' Special-Farb-Zuordnung
    3. mnu_MainForm.RenderMode = ToolStripRenderMode.Professional
    4. mnu_MainForm.Renderer = ProRender
    5. mnu_TextEditor.RenderMode = ToolStripRenderMode.Professional
    6. mnu_TextEditor.Renderer = ProRender
    7. mnu_PicEditor.RenderMode = ToolStripRenderMode.Professional
    8. mnu_PicEditor.Renderer = ProRender
    9. mnu_WebBrowser.RenderMode = ToolStripRenderMode.Professional
    10. mnu_WebBrowser.Renderer = ProRender
    11. ctm_Ordner.RenderMode = ToolStripRenderMode.Professional
    12. ctm_Ordner.Renderer = ProRender
    13. ctm_Objekte.RenderMode = ToolStripRenderMode.Professional
    14. ctm_Objekte.Renderer = ProRender
    15. ctm_TextEditor.RenderMode = ToolStripRenderMode.Professional
    16. ctm_TextEditor.Renderer = ProRender
    17. ctm_PicEditor.RenderMode = ToolStripRenderMode.Professional
    18. ctm_PicEditor.Renderer = ProRender
    19. ICE_OrdnerUndObjekteSuchen.ctm_OrdnerUndObjekteSuchen.RenderMode = ToolStripRenderMode.Professional
    20. ICE_OrdnerUndObjekteSuchen.ctm_OrdnerUndObjekteSuchen.Renderer = ProRender
    21. end sub


    und

    VB.NET-Quellcode

    1. Public Class MyProfessionalColorTable
    2. Inherits ProfessionalColorTable
    3. '
    4. ' Menus
    5. '
    6. Public Overrides ReadOnly Property MenuItemSelected() As System.Drawing.Color
    7. ' Menupunkt unter Mauszeiger
    8. Get
    9. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    10. Return Color.FromArgb(255, 120, 120, 255)
    11. Else
    12. Return Color.FromArgb(255, 180, 180, 255)
    13. End If
    14. End Get
    15. End Property
    16. Public Overrides ReadOnly Property MenuBorder() As System.Drawing.Color
    17. ' Menu Rahmen Popup geöffnet
    18. Get
    19. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    20. Return Color.FromArgb(255, 140, 140, 0)
    21. Else
    22. Return Color.FromArgb(255, 180, 180, 180)
    23. End If
    24. End Get
    25. End Property
    26. Public Overrides ReadOnly Property MenuItemBorder() As System.Drawing.Color
    27. ' Menu Rahmen MenuTitel Popup geschlossen
    28. Get
    29. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    30. Return Color.FromArgb(255, 140, 140, 0)
    31. Else
    32. Return Color.FromArgb(255, 180, 180, 180)
    33. End If
    34. End Get
    35. End Property
    36. Public Overrides ReadOnly Property MenuItemPressedGradientBegin() As System.Drawing.Color
    37. ' MenuTitel Popup geöffnet Beginn
    38. Get
    39. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    40. Return Color.FromArgb(255, 40, 40, 255)
    41. Else
    42. Return Color.FromArgb(255, 120, 120, 255)
    43. End If
    44. End Get
    45. End Property
    46. Public Overrides ReadOnly Property MenuItemPressedGradientMiddle() As System.Drawing.Color
    47. ' MenuTitel Popup geöffnet Mitte
    48. Get
    49. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    50. Return Color.FromArgb(255, 120, 120, 255)
    51. Else
    52. Return Color.FromArgb(255, 180, 180, 255)
    53. End If
    54. End Get
    55. End Property
    56. Public Overrides ReadOnly Property MenuItemPressedGradientEnd() As System.Drawing.Color
    57. ' MenuTitel Popup geöffnet Ende
    58. Get
    59. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    60. Return Color.FromArgb(255, 200, 200, 255)
    61. Else
    62. Return Color.FromArgb(255, 220, 220, 255)
    63. End If
    64. End Get
    65. End Property
    66. Public Overrides ReadOnly Property MenuItemSelectedGradientBegin() As System.Drawing.Color
    67. ' Ausgewählter MenueTitel-Name ungeöffnet
    68. Get
    69. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    70. Return Color.FromArgb(255, 40, 40, 255)
    71. Else
    72. Return Color.FromArgb(255, 120, 120, 255)
    73. End If
    74. End Get
    75. End Property
    76. Public Overrides ReadOnly Property MenuItemSelectedGradientend() As System.Drawing.Color
    77. ' Ausgewählter MenuTitel-Name ungeöffnet
    78. Get
    79. 'MyBase.MenuItemSelectedGradientBegin
    80. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    81. Return Color.FromArgb(255, 120, 120, 255)
    82. Else
    83. Return Color.FromArgb(255, 220, 220, 255)
    84. End If
    85. End Get
    86. End Property
    87. Public Overrides ReadOnly Property MenuStripGradientBegin() As System.Drawing.Color
    88. ' Menuleiste Beginn
    89. Get
    90. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    91. Return Color.FromArgb(255, 200, 200, 255)
    92. Else
    93. Return Color.FromArgb(255, 200, 200, 255)
    94. End If
    95. End Get
    96. End Property
    97. Public Overrides ReadOnly Property MenuStripGradientend() As System.Drawing.Color
    98. ' Menuleiste Ende
    99. Get
    100. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    101. Return Color.LightBlue 'Color.FromArgb(255, 140, 140, 140)
    102. Else
    103. Return Color.FromArgb(255, 180, 180, 180)
    104. End If
    105. End Get
    106. End Property
    107. Public Overrides ReadOnly Property SeparatorDark() As System.Drawing.Color
    108. ' Separator Dunkel
    109. Get
    110. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    111. Return Color.FromArgb(255, 80, 80, 80)
    112. Else
    113. Return Color.FromArgb(255, 180, 180, 180)
    114. End If
    115. End Get
    116. End Property
    117. Public Overrides ReadOnly Property SeparatorLight() As System.Drawing.Color
    118. ' Separator Hell
    119. Get
    120. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    121. Return Color.FromArgb(255, 250, 250, 250)
    122. Else
    123. Return Color.FromArgb(255, 200, 200, 200)
    124. End If
    125. End Get
    126. End Property
    127. '
    128. ' Image
    129. '
    130. Public Overrides ReadOnly Property ImageMarginGradientBegin() As System.Drawing.Color
    131. ' Symbol Farbübergang Beginn
    132. Get
    133. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    134. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe
    135. Else
    136. Return Color.FromArgb(255, 250, 250, 250)
    137. End If
    138. End Get
    139. End Property
    140. Public Overrides ReadOnly Property ImageMarginGradientmiddle() As System.Drawing.Color
    141. ' Symbol Farbübergang Mitte
    142. Get
    143. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    144. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe
    145. Else
    146. Return Color.FromArgb(255, 250, 250, 250)
    147. End If
    148. End Get
    149. End Property
    150. Public Overrides ReadOnly Property ImageMarginGradientend() As System.Drawing.Color
    151. ' Symbol Farbübergang Ende
    152. Get
    153. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    154. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe
    155. Else
    156. Return Color.FromArgb(255, 250, 250, 250)
    157. End If
    158. End Get
    159. End Property
    160. Public Overrides ReadOnly Property ImageMarginRevealedGradientBegin() As System.Drawing.Color
    161. '
    162. Get
    163. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    164. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe
    165. Else
    166. Return Color.FromArgb(255, 180, 180, 180)
    167. End If
    168. End Get
    169. End Property
    170. Public Overrides ReadOnly Property ImageMarginRevealedGradientmiddle() As System.Drawing.Color
    171. '
    172. Get
    173. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    174. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe
    175. Else
    176. Return Color.FromArgb(255, 180, 180, 180)
    177. End If
    178. End Get
    179. End Property
    180. Public Overrides ReadOnly Property ImageMarginRevealedGradientend() As System.Drawing.Color
    181. '
    182. Get
    183. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    184. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe
    185. Else
    186. Return Color.FromArgb(255, 180, 180, 180)
    187. End If
    188. End Get
    189. End Property
    190. '
    191. ' Toolstrip
    192. '
    193. Public Overrides ReadOnly Property ToolStripBorder() As System.Drawing.Color
    194. '
    195. Get
    196. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    197. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    198. Else
    199. Return Color.FromArgb(255, 250, 250, 250)
    200. End If
    201. End Get
    202. End Property
    203. Public Overrides ReadOnly Property ToolStripContentPanelGradientBegin() As System.Drawing.Color
    204. '
    205. Get
    206. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    207. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    208. Else
    209. Return Color.FromArgb(255, 250, 250, 250)
    210. End If
    211. End Get
    212. End Property
    213. Public Overrides ReadOnly Property ToolStripContentPanelGradientEnd() As System.Drawing.Color
    214. '
    215. Get
    216. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    217. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    218. Else
    219. Return Color.FromArgb(255, 250, 250, 250)
    220. End If
    221. End Get
    222. End Property
    223. Public Overrides ReadOnly Property ToolStripDropDownBackground() As System.Drawing.Color
    224. '
    225. Get
    226. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    227. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    228. Else
    229. Return Color.FromArgb(255, 250, 250, 250)
    230. End If
    231. End Get
    232. End Property
    233. Public Overrides ReadOnly Property ToolStripGradientBegin() As System.Drawing.Color
    234. '
    235. Get
    236. 'MyBase.ToolStrip
    237. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    238. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    239. Else
    240. Return Color.FromArgb(255, 250, 250, 250)
    241. End If
    242. End Get
    243. End Property
    244. Public Overrides ReadOnly Property ToolStripGradientMiddle() As System.Drawing.Color
    245. ' Toolstrip Hintergrund Separatoren und PopupRahmen
    246. Get
    247. 'MyBase.ToolStripGradientBegin
    248. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    249. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    250. Else
    251. Return Color.FromArgb(255, 250, 250, 250)
    252. End If
    253. End Get
    254. End Property
    255. Public Overrides ReadOnly Property ToolStripGradientEnd() As System.Drawing.Color
    256. ' Toolstrip Hintergrund Separatoren und PopupRahmen
    257. Get
    258. 'MyBase.ToolStripGradientBegin
    259. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    260. Return MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 7).Hintergrundfarbe 'MyBase.ToolStripDropDownBackground
    261. Else
    262. Return Color.FromArgb(255, 250, 250, 250)
    263. End If
    264. End Get
    265. End Property
    266. Public Overrides ReadOnly Property ToolStripPanelGradientBegin() As System.Drawing.Color
    267. ' Toolstrip Farbübergang Beginn
    268. Get
    269. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    270. Return Color.FromArgb(255, 140, 140, 140)
    271. Else
    272. Return Color.FromArgb(255, 180, 180, 180)
    273. End If
    274. End Get
    275. End Property
    276. Public Overrides ReadOnly Property ToolStripPanelGradientend() As System.Drawing.Color
    277. ' Toolstrip Farbübergang Ende
    278. Get
    279. If MainForm.DesignArray(My.Settings.Oberfläche_Design * 10 + 1).Menulisten = True Then
    280. Return Color.FromArgb(255, 140, 140, 140)
    281. Else
    282. Return Color.FromArgb(255, 180, 180, 180)
    283. End If
    284. End Get
    285. End Property
    286. End Class


    ergibt Bild.

    Nur mit dem Hintergrund der Menusymbole habe ich Probleme - wollte diese eigentlich auf anderem Hintergrund haben, wie in den Originalmenus auch.
    Das bekomme ich aber nicht hin.
    Weiss einer von Euch, warum das nicht will?

    Beste Grüsse
    Bilder
    • Menus.jpg

      134,69 kB, 798×429, 36 mal angesehen