我在RadioButtons
中有4 UniformGrid
。
最初它们都设置为false
。
但是一旦我点击其中一个,就会始终保持真实。
我们的要求是它们都可以设置为false。
我尝试过像
这样的事情<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsChecked,
RelativeSource={RelativeSource Self}}" Value="True"/>
<Condition Binding="{Binding IsPressed,
RelativeSource={RelativeSource Self}}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsChecked" Value="False"/>
</MultiDataTrigger>
但它没有用。我知道我可以使用ToggleButton
,但一次只能检查RadioButtons
中的一个。
这甚至可能吗?
答案 0 :(得分:0)
我可以马上告诉你一个样式不会解决你的问题,因为一旦用户设置了DependencyProperty的值它忽略了样式设置器,你应该阅读Dependency Property Value Precedence。
另一方面,当单选按钮具有IsChecked = True时,您可以尝试单独处理鼠标单击,如下所示:
<RadioButton GroupName="AAA" PreviewMouseLeftButtonDown="RadioButton_PreviewMouseLeftButtonDown"/>
和
private void RadioButton_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
RadioButton radioButton = sender as RadioButton;
if (radioButton != null && radioButton.IsChecked.GetValueOrDefault())
{
radioButton.IsChecked = false;
e.Handled = true;
}
}
我认为这可以解决问题。
答案 1 :(得分:0)
您的解决方案仅在实际按下鼠标按钮时有效(尝试按住它,您将看到)。
想到的最简单的方法是改变RadioButton
以满足我们的需求:
public class UncheckableRadioButton : RadioButton
{
protected override void OnToggle()
{
if (IsChecked == true)
IsChecked = false;
else base.OnToggle();
}
}
如果再次点击,Theese自定义无线电将取消选中。
答案 2 :(得分:0)
当icebat要求时,我会发布我的解决方案:
我只为我的RadioButtons
创建了一个事件处理程序,我在其中比较了我的类中定义的某些值:
private int PopupID;
private bool IsPopupActive;
private void RadioButton_Click(object sender, RoutedEventArgs e)
{
RadioButton rb = (RadioButton)sender;
string s = (string)rb.Content;
int id = int.Parse(s);
if (PopupID == id && IsPopupActive == true)
{
foreach (RadioButton rbb in PopupGrid.Children.OfType<RadioButton>())
rbb.SetValue(RadioButton.IsCheckedProperty, false);
IsPopupActive = false;
}
else if (PopupID != id || IsPopupActive == false)
{
foreach (RadioButton rbb in PopupGrid.Children.OfType<RadioButton>()
.Where(x => x != rb))
rbb.SetValue(RadioButton.IsCheckedProperty, false);
IsPopupActive = true;
PopupID = id;
}
}
不是像这样的代码隐藏解决方案的忠实粉丝,但它确实有效。