Вот мое решение с использованием конвертера.Преобразователь получит строковое значение, а затем вернет цвет, см. Ниже.
public class StringToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var listItem = value as ListBoxItem;
if (listItem != null)
{
var text = listItem.Content;
switch (text)
{
case "Green":
return new SolidColorBrush(Colors.Green);
case "Yellow":
return new SolidColorBrush(Colors.Yellow);
case "Red":
return new SolidColorBrush(Colors.Red);
}
}
return new SolidColorBrush(Colors.Transparent);
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Вы допустили ошибку в своем xaml, поскольку не можете напрямую изменить фон кнопки переключения.Ниже описано, как использовать конвертер с вашим реальным кодом.Обратите внимание, что это только изменит фон текстового блока.чтобы кнопка выглядела лучше см. здесь
<StackPanel>
<Popup IsOpen="{Binding IsChecked, ElementName=button}" StaysOpen="False">
<Border Background="LightYellow">
<ListBox x:Name="ColorPicker">
<ListBoxItem>Green</ListBoxItem>
<ListBoxItem>Yellow</ListBoxItem>
<ListBoxItem>Red</ListBoxItem>
</ListBox>
</Border>
</Popup>
<ToggleButton Name="button"
Height="50"
>
<TextBlock Text="Change!" Background="{Binding Source={x:Reference ColorPicker}, Path=SelectedValue, Converter={StaticResource StringToColorConverter}}"/>
</ToggleButton>
</StackPanel>