如何检查ToggleButton的initiale状态

时间:2017-09-03 18:08:54

标签: c# wpf

我有两个toggleButton's,都设置为null状态,现在我想检查用户是否切换过按钮。

<StackPanel Height="45" Orientation="Horizontal" Margin="0,20,0,0">
<Label VerticalContentAlignment="Bottom" Content="هل القاعة صالحة من حيث الإستماع؟"/>
<ToggleButton x:Name="ListeningStatusText" IsThreeState="True" IsChecked="{x:Null}" />
</StackPanel>

<StackPanel Height="45" Orientation="Horizontal" Margin="0,20,0,0">
<Label VerticalContentAlignment="Bottom" Content="الإضاءة"/>
<ToggleButton x:Name="LightingStatusText" IsThreeState="True" IsChecked="{x:Null}" />
</StackPanel>

使用下面的代码,我无法查看用户是否从不切换按钮:

var ToggleButtonControl = (ToggleButton)ControlName; // 
if (ToggleButtonControl.IsChecked == null)
{
    parameterStr = "/////////////";
    //MessageBox.Show("This should pop-up only if the user never toggled the button");
}
else
{
    //MessageBox.Show("The user toggle or toggle it back");
    if (ToggleButtonControl.IsChecked == false)
        parameterStr = "لا";
    else
        parameterStr = "نعم";
}

2 个答案:

答案 0 :(得分:0)

如果您想知道该用户是否曾切换过该按钮,请将一个函数附加到Checked和Unchecked事件,并在您的班级中设置一个布尔标志来跟踪该事件。

按钮看起来像这样(加上你的其他属性):

<ToggleButton
Checked="toggleButton_Changed"
Unchecked="toggleButton_Changed" />

在函数体中,将boolean标志设置为true,这意味着用户已切换按钮。如果要获取当前值,请选中按钮的IsChecked属性。

答案 1 :(得分:0)

没有内置属性可用于确定ToggleButton是否已被切换。用户可以根据需要在truefalsenull州之间切换。

您需要自己跟踪。这应该是一件容易的事情。例如,您可以按照@pedrolmota的建议处理CheckedUnchecked事件,并使用字段来跟踪是否曾调用过这些事件处理程序:

private bool _hasBeenToggled;
private void ToggleButton_Checked(object sender, RoutedEventArgs e)
{
    _hasBeenToggled = true;
}

private void ToggleButton_Unchecked(object sender, RoutedEventArgs e)
{
    _hasBeenToggled = true;
}

然后,您只需检查其他方法中字段的值:

var ToggleButtonControl = (ToggleButton)ControlName; // 
if (!_hasBeenToggled) //<--
{
    parameterStr = "/////////////";
    //MessageBox.Show("This should pop-up only if the user never toggled the button");
}
else
{
    //MessageBox.Show("The user toggle or toggle it back");
    if (ToggleButtonControl.IsChecked == false)
        parameterStr = "لا";
    else
        parameterStr = "نعم";
}

如果您遵循MVVM设计模式,则可以在源属性的setter中设置_hasBeenToggled