检查ToggleSwitch是否开启

本文关键字:是否 ToggleSwitch 检查 | 更新日期: 2023-09-27 18:06:01

我知道这一定是一件愚蠢的事情,但我找不到如何检查ToggleSwitch是否打开。这是我的代码:

    private void ToggleNamePrivacy_Toggled(object sender, RoutedEventArgs e)
    {
        if (ToggleNamePrivacy.IsOn == true)
        {
            PrivacyImage.Source = new BitmapImage(new Uri("Assets/public.png", UriKind.Relative));
        }
        else
        {
            PrivacyImage.Source = new BitmapImage(new Uri("Assets/private.png", UriKind.Relative));
        }
    }

if子句导致

NullReferenceException:对象引用未设置为对象。

都不工作,如果我写:

if(ToggleNamePrivacy.IsOn)

为什么?

检查ToggleSwitch是否开启

解决:这一定是一个bug,但你不能同时设置"IsOn"属性和"Toggled"事件在XAML或IsOn将触发Toggled事件在页面加载之前。

不工作:

<ToggleSwitch Toggled="ToggleSwitch_Toggled" IsOn="True" /> 
工作:

<ToggleSwitch Toggled="ToggleSwitch_Toggled" />

(然后可以通过代码设置)

听起来你的作用域是正确的,否则它不会编译。方法从哪里被调用?如果它在InitializeComponent()之前,那么它将为空。我只会在方法开始时检查null并返回,因为它可能只是在应用程序第一次启动时在初始设置上被调用。

对于那些在ListViewItem/GridViewItem中有相同问题的人。只需在XAML中订阅Toggle的Loaded事件,并在其中订阅Toggled。在XAML:

<ToggleSwitch Loaded="ToggleSwitch_Loaded" />

在c#中

  private void ToggleSwitch_Loaded(object sender, RoutedEventArgs e)
        {
            ToggleSwitch toggle = (ToggleSwitch)sender;
            toggle.Toggled += ToggleSwitch_Toggled;
        }
  private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
        {
            //Your logic
        }