Background: I am creating a custom listbox that has radio buttons on each listbox item, so essentially it will be a RadioButtonList. The control is created entirely in code. As of right now the control renders and behaves correctly and supports 2 orientations (Horizontal/Vertical). The listbox uses an ItemTemplate that is a StackPanel with a RadioButton and a TextBlock.
So far I have been able to prevent the background color of the item from changing when the item is selected by using a style that sets it's background to transparent.
I would like to also do the same for the foreground color.
Basically, the Selection mode of the ListBox is single, and when an item is selected, I only want it to be reflected by the RadioButton.
I am using the following code to set the ItemContainerStyle:
System.Windows.Style style =
new System.Windows.Style(typeof(System.Windows.Controls.ListBoxItem));
System.Windows.Media.SolidColorBrush brush =
new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);
style.Resources.Add(System.Windows.SystemColors.HighlightBrushKey, brush);
The TextBlock of my template is created using a System.Windows.FactoryFrameworkElement like this:
System.Windows.FrameworkElementFactory factoryTextBlock =
new System.Windows.FrameworkElementFactory(typeof(System.Windows.Controls.TextBlock));
factoryTextBlock.SetBinding(System.Windows.Controls.TextBlock.TextProperty, new System.Windows.Data.Binding("Description"));
factoryStackPanel.AppendChild(factoryTextBlock);
The FactoryTextBox is then appended to the FactoryStackPanel and is set as the ItemTemplate of the ListBox.
At the moment, I have the background color being set to Transparent when the item is selected. Since the text gets set to white by default, it visually disappears when the item is selected. I am looking for a way to set a color on the foreground of the textblock when it's selected. For now it can be black, but eventually it will reference a font color at a higher level.