我有stackpanel
我作为孩子动态添加RadioButtons
。
Radiobuttons
的内容为整数。
我还有Y x Y
网格(大小由代码动态确定),我动态添加按钮,允许用户将Button的内容更改为表示整数的字符串。
这是我需要帮助的地方:
从stackpanel检查任意单选按钮后,我希望网格中所有具有相同编号的按钮的背景颜色都会改变。
由于我是WPF的新手,我不确定如何实现这一点,我们将非常感谢您的帮助。
修改 我做了一点进步,我做的基本上是将Button.Content与RadioButton.IsChecked和RadioButton.Content绑定到每个按钮和每个单选按钮,但我有问题,它只适用于最后的radiobutton这里是代码(rbuts = radiobuttons的父控件,MyGrid =按钮的父控件):
for (int z = 0; z < boardSize * boardSize; z++)
{
Button b1 = MyGrid.Children[z] as Button;
for (int i = 0; i < boardSize; i++)
{
MultiBinding rbtnBinding = new MultiBinding();
rbtnBinding.Converter = new RadioButtonHighlightConverter();
rbtnBinding.Bindings.Add(new Binding("IsChecked") { Source = rbuts.Children[i] });
rbtnBinding.Bindings.Add(new Binding("Content") { Source = rbuts.Children[i] });
rbtnBinding.Bindings.Add(new Binding("Content") { Source = MyGrid.Children[z] });
rbtnBinding.NotifyOnSourceUpdated = true;
b1.SetBinding(Button.BackgroundProperty, rbtnBinding);
}
}
就好像我不能为同一个按钮设置许多不同的多重绑定...
答案 0 :(得分:0)
您可以将按钮样式放在资源字典中并绑定按钮的样式并使用转换器
<强> ButtonStyles.xaml 强>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ButtonStyle1" TargetType="Button">
<Setter Property="Background" Value="Green"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style x:Key="ButtonStyle2" TargetType="Button">
<Setter Property="Background" Value="Red"/>
<Setter Property="FontSize" Value="14"/>
</Style>
</ResourceDictionary>
然后,对于具有此要求的Button,将Style绑定到感兴趣的属性
<Button ...
Style="{Binding Path=MyDataProperty,
Converter={StaticResource ButtonStyleConverter}}"/>
在转换器中,您加载ButtonStyles资源字典并根据值
返回所需的样式public class ButtonStyleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Uri resourceLocater = new Uri("/YourNameSpace;component/ButtonStyles.xaml", System.UriKind.Relative);
ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
if (value.ToString() == "Some Value")
{
return resourceDictionary["ButtonStyle1"] as Style;
}
return resourceDictionary["ButtonStyle2"] as Style;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
编辑:
添加了转换器参数的详细信息
<RadioButton Content="None"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<RadioButton.IsChecked>
<Binding Path="MyProperty"
Converter="{StaticResource IntToBoolConverter}">
<Binding.ConverterParameter>
<sys:Int32>0</sys:Int32>
</Binding.ConverterParameter>
</Binding>
</RadioButton.IsChecked>
</RadioButton>