WPF complete guide to Themes and Skins

In WPF we define a UI resource system (mostly in XAML resource dictionaries) which includes colors, templates, icons, styles and so on. Sometimes, we need the ability to change our application’s look and feel dynamically, allowing different Themes or Skins.

We might have Shared resources for all Themes and Dynamic resources based on the current Theme or Skin.

The following article talks about the different ways to build a theming/skinning infrastructure in a WPF application.

Continue reading

Software Engineer’s path to the best annual performance review

How the annual review scores are formed in the eyes of managers always fascinated me. I have five years of experience with annual reviews myself, and I was always able to do well on them.

As a tech lead I got to give recommendations and participate in some discussions with managers. I formed a pretty firm and possibly naive point of view on them now.

Continue reading

WPF XAML Resource Benchmark

WPF is very dynamic and allows us to use resources in many different ways. We can use Static or Dynamic. We can place all our resources in App.xaml or use merged dictionaries each time.

You can see all the approaches and what I think is best practice in my WPF Merged Dictionary problems and solutions post.

If you’re new to WPF resources, I suggest reading my Explicit, Implicit and Default styles in WPF post before diving into this one.

This benchmark is supposed to show, in numbers, how any approach affects performance.
Here’s what I want answered with this benchmark:

  1. Is splitting resources in App.xaml to many Merged Dictionaries file vs. one long App.xaml file means longer application startup time?
  2. Is loading all resources in App.xaml once better than loading the resources every time with merged dictionary?
  3. Is DynamicResource instead of StaticResource an issue? How big of an issue?’

Continue reading

Why Visual Studio keeps rebuilding my projects for no good reason

Did you ever feel like Visual Studio is rebuilding projects every single time, even when there were no changes to the code?

We can build, change nothing, build again and there we go… VS is starting a build instead of saying all my projects are up to date.

Also, there’s that nagging feeling that even when we do change something, VS is building way more projects that it needs.

Like most things I do in life, frustration led me to look further into this matter.

Continue reading

How my life changed when moving from TFVC(TFS) to Git

After working for the last three years with TFS’s classic source control TFVC, I recently moved to a new company and with that, to Git.

Before working with Git, I loved working with TFVC. I thought it was great and pretty much the most I can expect from a source control.

Git however changed the way I work with source control and even the way I think about source control.

This post is a small taste of what Git does and how my workflow changed accordingly. It is not a Git tutorial, but rather my impressions from it. I do link at the end to some additional resources.

Continue reading

Leaving Cellebrite

After three years and three months in Cellebrite, I decided to leave the company and pursue other challenges.

Cellebrite was a great place to work at with great people and I enjoyed my time there.
This post is a recap of my time in Cellebrite and why I eventually decided to leave.

Starting up

I started a software developer in a team of 6, working on a large WPF application. After working in a startup company, I was impressed on how professional and orderly everything was. We had TFS work items, we had a build machine, we had an installer to create our Setup files, we had update distribute system. I was truly impressed.

In-office Nerf warsIn-office Nerf wars

Continue reading

4 Tips to increase productivity with WPF Converters

When starting with WPF, I had a hard time realizing when to use converters and just how powerful they can be. I would often create styles with complicated Data Triggers, or abuse my ViewModel instead of doing some simple converter magic.

I’ll share with you some converter tips and tricks that make my development easier every day.

Continue reading

WPF page navigation like in MVC part 2: The MVVMC Framework

Before reading this, check out my last post. I talked about navigation techniques in MVVM and how I didn’t like them too much. I also talked about learning Asp.NET Core is and how good the navigation / routing system is in there.

So, following the pain, I decided to create a lightweight navigation WPF framework similar to the one in Asp.NET Core. We’re still using MVVM, but adding controllers which makes it MVVMC, Model-View-ViewModel-Controller (This is how the library is called as well).

Everything is available on GitHub.
Now let’s see how to use MVVMC with a WPF application:

Continue reading

The Over Designer

Have you ever encountered an over designer? An over designer is a software developer that had some life changing event and became obsessed about architecture. The result being, obsessive decoupling, endless coding of Factories, creating deep (also needless) inheritence hierarchies and various use of design patterns for no good reason.

I believe the over deisgner is a mutation in the natural evolution of a software developer.

Software Developer’s Evolution

Not every software developer reaches to Senior level. Few reach to Jedi Master and some rare geniuses evolve to Jon Skeet’s level.

I believe somewhere during the transition from Code Monkey to Senior a mutation occurs: The Over Designer.

Continue reading