<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws" -->

---
title: Solution Colors: Telling Visual Studio Windows Apart at...
description: Solution Colors is a Visual Studio extension that assigns a distinct color to each solution or folder, shown via window borders, title bar text, and taskbar...
canonical: https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Solution Colors: Telling Visual Studio Windows Apart at a Glance | daily.dev
og:description: Solution Colors is a Visual Studio extension that assigns a distinct color to each solution or folder, shown via window borders, title bar text, and taskbar...
og:url: https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws
og:image: https://api.daily.dev/og/posts/BPL34aZwS.png
og:image:alt: Solution Colors: Telling Visual Studio Windows Apart at a Glance
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Solution Colors: Telling Visual Studio Windows Apart at a Glance

**[Mads Kristensen](https://daily.dev/sources/madskristensen)** · 5 min read · 0 upvotes · 0 comments

## Summary

Solution Colors is a Visual Studio extension that assigns a distinct color to each solution or folder, shown via window borders, title bar text, and taskbar thumbnails, so developers can tell multiple open Visual Studio windows apart at a glance. It supports per-branch or gradient coloring stored in a simple color.txt file. Technically, it's an in-process VSIX built on the Visual Studio SDK and Community Toolkit that modifies the shell's WPF visual tree directly rather than using a dedicated extensibility API, which required careful handling of hit testing, startup timing, and thread dispatching. The piece walks through these implementation tradeoffs as a case study in extending an IDE without disrupting its existing UI, including a recent bug fix that separated branch-color decision logic into a testable method.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.madskristensen.net/blog/solution-colors-telling-visual-studio-windows-apart-at-a-glance>

## Questions this post answers

### How can I make a Visual Studio extension change the color of the IDE's window chrome like borders and title bar text?

You search the WPF visual tree for named shell elements such as BottomDockBorder and PART_SolutionNameTextBlock and directly modify their brushes and border thickness instead of creating a new tool window. For the title bar text, reflection is used to access the foreground property, and Visual Studio's ColorUtilities.CompareContrastWithBlackAndWhite method picks readable black or white text automatically.

_daily.dev surfaces more deep dives like this for developers extending the Visual Studio shell beyond documented APIs._

### Why shouldn't I disable hit testing on every decorative border element I add to an IDE window?

Because some elements that look purely decorative, like a window's top title bar region, actually contain interactive UI such as menus, so disabling hit testing there would block user interaction. Non-top borders can safely have hit testing disabled since they only intercept mouse input without serving any interactive purpose, but the top element must be left alone.

_Developers building custom IDE chrome can find similar UI-layering pitfalls discussed on daily.dev._

### How can I store per-branch configuration settings in a text file without rediscovering the repository's default branch each time?

Use an explicit internal convention, such as the literal key "master" to represent a shared or base setting, rather than auto-detecting a repository's actual configured default branch. Assignments can be stored as simple key:value lines, for example branch:color pairs, in a plain text file located under version-control metadata directories like .vs.

_daily.dev readers researching branch-aware tooling design often compare patterns like this one._

## Similar posts on daily.dev

- [Stop alt-tabbing into the wrong Visual Studio](https://daily.dev/posts/stop-alt-tabbing-into-the-wrong-visual-studio-nhfboea3g) · Visual Studio Blog · 0 upvotes · 0 comments
- [Make Visual Studio look the way you want](https://daily.dev/posts/make-visual-studio-look-the-way-you-want-6glnkivrz) · Visual Studio Blog · 9 upvotes · 1 comments
- [No-Hassle Visual Studio Code Theming: Building an Extension](https://daily.dev/posts/no-hassle-visual-studio-code-theming-building-an-extension-wyiwzoyp3) · CSS-Tricks · 2 upvotes · 0 comments
- [Using connection colors in SQL Server Management Studio to prevent database disasters](https://daily.dev/posts/using-connection-colors-in-sql-server-management-studio-to-prevent-database-disasters-ow288pfl5) · The Art of Simplicity · 2 upvotes · 0 comments

---

Tags: [#git](https://daily.dev/tags/git), [#visual-studio](https://daily.dev/tags/visual-studio), [#wpf](https://daily.dev/tags/wpf)

[View this post on daily.dev](https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Solution Colors: Telling Visual Studio Windows Apart at a Glance","url":"https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws"},"datePublished":"2026-10-04T13:07:08.820Z","dateModified":"2026-10-04T13:16:44.791Z","description":"Solution Colors is a Visual Studio extension that assigns a distinct color to each solution or folder, shown via window borders, title bar text, and taskbar...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3343f86088f8b5002c4f83c47d42c634?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3343f86088f8b5002c4f83c47d42c634?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Mads Kristensen","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Mads Kristensen","logo":"https://media.daily.dev/image/upload/s--gtcmG3po--/f_auto,q_auto/v1791119055/logos/madskristensen?_a=BAMAMicg0","url":"https://daily.dev/sources/madskristensen"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"git,visual-studio,wpf","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Mads Kristensen","item":"https://daily.dev/sources/madskristensen"},{"@type":"ListItem","position":3,"name":"Solution Colors: Telling Visual Studio Windows Apart at a Glance"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/solution-colors-telling-visual-studio-windows-apart-at-a-glance-bpl34azws#faq","mainEntity":[{"@type":"Question","name":"How can I make a Visual Studio extension change the color of the IDE's window chrome like borders and title bar text?","acceptedAnswer":{"@type":"Answer","text":"You search the WPF visual tree for named shell elements such as BottomDockBorder and PART_SolutionNameTextBlock and directly modify their brushes and border thickness instead of creating a new tool window. For the title bar text, reflection is used to access the foreground property, and Visual Studio's ColorUtilities.CompareContrastWithBlackAndWhite method picks readable black or white text automatically. daily.dev surfaces more deep dives like this for developers extending the Visual Studio shell beyond documented APIs."}},{"@type":"Question","name":"Why shouldn't I disable hit testing on every decorative border element I add to an IDE window?","acceptedAnswer":{"@type":"Answer","text":"Because some elements that look purely decorative, like a window's top title bar region, actually contain interactive UI such as menus, so disabling hit testing there would block user interaction. Non-top borders can safely have hit testing disabled since they only intercept mouse input without serving any interactive purpose, but the top element must be left alone. Developers building custom IDE chrome can find similar UI-layering pitfalls discussed on daily.dev."}},{"@type":"Question","name":"How can I store per-branch configuration settings in a text file without rediscovering the repository's default branch each time?","acceptedAnswer":{"@type":"Answer","text":"Use an explicit internal convention, such as the literal key \"master\" to represent a shared or base setting, rather than auto-detecting a repository's actual configured default branch. Assignments can be stored as simple key:value lines, for example branch:color pairs, in a plain text file located under version-control metadata directories like .vs. daily.dev readers researching branch-aware tooling design often compare patterns like this one."}}]}
```

