WPF делает это действительно легко - вы можете привязать свойство BackgroundBox к данным непосредственно к свойству IsChecked на ToggleButton. Конечно, вам нужно будет преобразовать IsChecked (логическое значение) в Brush, но WPF позволяет вам указывать объект Converter прямо в привязке ...
В коде вы создаете объект, который реализует IValueConverter
, и реализует метод Convert, например
public class BoolToBrushConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool isChecked = (bool)value;
string[] colours = parameter.ToString().Split(':');
if (isChecked)
return new BrushConverter().ConvertFromString(colours[0]);
return new BrushConverter().ConvertFromString(colours[1]);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
тогда в xaml вам нужно добавить пространство имен, содержащее этот класс, объявить экземпляр конвертера как ресурс в окне, а затем использовать его в Binding ... оно должно выглядеть примерно так:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:BoolToBrushConverter x:Key="boolToBrushConverter" />
</Window.Resources>
<StackPanel Height="250">
<ToggleButton Name="toggleButton" Height="32" Content="Green" />
<TextBox
Background="{Binding ElementName=toggleButton, Path=IsChecked, Converter={StaticResource boolToBrushConverter}, ConverterParameter=Green:White}" />
</StackPanel>
</Window>
ОБНОВЛЕНИЕ : В соответствии с превосходным предложением Ивана - обновлены, чтобы показать, как вы можете передать параметры в конвертер из XAML ...