Answered Set color of substring without using richtext box?

destro

Active member
Joined
Mar 28, 2020
Messages
28
Programming Experience
1-3
Can I change the color of substrings in a single variable without using richtext box?
Currently I am using labels and want to give different color to a single string.
 

jmcilhinney

C# Forum Moderator
Staff member
Joined
Apr 23, 2011
Messages
3,217
Location
Sydney, Australia
Programming Experience
10+
Can I change the color of substrings in a single variable without using richtext box?
That doesn't really make sense as asked. A String is just text. It doesn't contain any information about how that text should be displayed unless it is interpreted as markup, e.g. RTF or HTML. You can instruct a Label how to display the text as a whole, e.g. by specifying a font or colour, but variable formatting takes something more.
Currently I am using labels and want to give different color to a single string.
The Label does have a Content property but then you'd need to assign something to that that could do the variable formatting. There's certainly no standard control that will allow you to load plain text and easily specify how it gets formatted. The RichTextBox does it by loading RTF markup and interpreting that. Another option that is still not the simple magic solution you want but might be easier than RTF is to use some sort of web browser control and use HTML markup to format. That's a bit more human-readable than RTF and web browsers are read-only by default.
 

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
1,959
Location
Chesapeake, VA
Programming Experience
10+
Out of curiosity, is there some kind of stylistic UI trend that is driving this question? A thing a few days ago, someone asked a similar question in DIC but with regards to DevExpress labels rather than WPF labels. Are there websites or some kind of phone app that everyone is trying to emulate that has this look where labels have multiple styles applied to them?
 

Sheepings

Senior Programmer
Staff member
Joined
Sep 5, 2018
Messages
1,679
Location
UK
Programming Experience
10+
What's wrong with creating a class for your labels, and creating a template around that class of labels?
Or creating a template around your xaml labels if that's where you have then designed?

Anything you can do in a webbrowser control can be done in xaml. Your options in WPF are far from being limited, and in fact, you have a wide variety of ways to approach this in WPF. Nothing some independent search engines cant help with unless someone here has the time to show you an example using custom templates.

Frankly, if you are creating complex UI systems, I would suggest using a asp.net MVC app, and create a desktop wrapper for your web project. This is the most modern approach for developing stylish desktop UI systems today, which most developers are starting to undertake. I myself have been building projects like this for some time now.

I would provide you with an example as I have done in the past, except I am very busy as I am about to release one of my biggest projects of my career year-end. Start with custom templating.
 

destro

Active member
Joined
Mar 28, 2020
Messages
28
Programming Experience
1-3
What's wrong with creating a class for your labels, and creating a template around that class of labels?
Or creating a template around your xaml labels if that's where you have then designed?

Anything you can do in a webbrowser control can be done in xaml. Your options in WPF are far from being limited, and in fact, you have a wide variety of ways to approach this in WPF. Nothing some independent search engines cant help with unless someone here has the time to show you an example using custom templates.

Frankly, if you are creating complex UI systems, I would suggest using a asp.net MVC app, and create a desktop wrapper for your web project. This is the most modern approach for developing stylish desktop UI systems today, which most developers are starting to undertake. I myself have been building projects like this for some time now.

I would provide you with an example as I have done in the past, except I am very busy as I am about to release one of my biggest projects of my career year-end. Start with custom templating.
Best of luck for your project... As there is a lot of work in my current project, I'll simply go with rtf.
 

Sheepings

Senior Programmer
Staff member
Joined
Sep 5, 2018
Messages
1,679
Location
UK
Programming Experience
10+
Templating is easier. Research before you dive in.
 

destro

Active member
Joined
Mar 28, 2020
Messages
28
Programming Experience
1-3
@Sheepings I looked into dataTriggers but still can get my head around templating and styles.

My label shows a planet that is in ViewModel but I want to change the color of label content based on what planet it is showing.

A single label can hold multiple planets like this:
Saturn 19°
Jupiter 25°
Venus 65°

Mercury 76°
I want to assign different color to each planet.
 
Last edited:

destro

Active member
Joined
Mar 28, 2020
Messages
28
Programming Experience
1-3
Okay its not easy as it seems. Suppose "Saturn 19 + "\xb0" + "\n" + "Jupiter 25" + "\xb0" + "\n" + "Venus 65" + "\xb0" + "\n" + "Mercury 76" + "\xb0" + "\n" is one single string displayed in a label as:

Saturn 19°
Jupiter 25°
Venus 65°

Mercury 76°


but I want to display it as
Saturn 19°
Jupiter 25°
Venus 65°

Mercury 76°

Every Planet should have its own color but whole string is in single label binded to a single variable.

How many planets will be there inside the string variable is based on calculation inside a viewmodel. View Model uses iteration to append all planets in this form:
"Saturn 19 + "\xb0" + "\n" + "Jupiter 25" + "\xb0" + "\n" + "Venus 65" + "\xb0"

Can I still use Xaml Templating for such operation?? @Sheepings
 
Last edited:

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
1,959
Location
Chesapeake, VA
Programming Experience
10+
Part of the issue is that you are using a single label to hold multiple pieces of data -- in this case multiple planets. If you had one label per planet then the problem becomes more manageable. For each label, not only would you bind the planet, but you would also bind the label's color to a converter. The job of the converter is to map the planet to a color.
 

Sheepings

Senior Programmer
Staff member
Joined
Sep 5, 2018
Messages
1,679
Location
UK
Programming Experience
10+

Skydiver

Staff member
Joined
Apr 6, 2019
Messages
1,959
Location
Chesapeake, VA
Programming Experience
10+
The code I have in post #19 of GlassWizard's thread takes one approach of assigning a color in a view model. I did that because the model and problem domain deals with colors directly.

The approach that most people take is to use a converter. A converter is more appropriate because the model and domain don't really care about colors. It's the view and view model which care about the colors. So in the normal case, you don't want a color to be sitting in your data model. You want the view or the supporting view model to take care of choosing a color. See this blog post to see how that is done.
 
Top Bottom