从代码后面访问类的XAML实例

本文关键字:XAML 实例 访问 代码 | 更新日期: 2023-09-27 18:17:49

我曾经在app.xaml.cs中定义了一个自定义类的实例,所以我可以在应用程序的任何地方访问它。然而,我现在已经改变了这一点,以便在我的应用程序资源中创建类的实例。

App.xaml

<Application x:Class="Duplicate_Deleter.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Duplicate_Deleter">
    <Application.Resources>
        <local:runtimeObject x:Key="runtimeVariables" />
    </Application.Resources>
</Application>

App.xaml.cs 这就是班级

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace Duplicate_Deleter
    /// <summary>
    /// Global values for use during application runtime
    /// </summary>
    public class runtimeObject
    {
        //Can the application be closed?
        private bool _inProgress = false;
        public bool inProgress
        {
            get { return _inProgress; }
            set { _inProgress = value; }
        }
        //Selected folder to search in
        private string _fromFolder = "testing string";
        public string fromFolder
        {
            get { return _fromFolder; }
            set { _fromFolder = value; }
        }
    }
}

我的问题是现在,我需要能够访问我的命令命名空间后面的代码中的类的这个实例。下面您可以看到其中一个命令,当实例位于App.xaml.cs中时,App.runtime用于工作。

Classes> Commands.cs

public static void CloseWindow_CanExecute(object sender,
                           CanExecuteRoutedEventArgs e)
        {
            if (App.runtime.inProgress == true)
            {
                e.CanExecute = false;
            }
            else
            {
                e.CanExecute = true;
            }
        }

我现在如何从命令中引用我的类实例?

从代码后面访问类的XAML实例

你可以在代码的任何地方使用TryFindResource:

public static void CloseWindow_CanExecute(object sender,
                       CanExecuteRoutedEventArgs e)
    {
        // Find the resource, then cast it to a runtimeObject
        var runtime = (runtimeObject)Application.Current.TryFindResource("runtimeVariables");
        if (runtime.InProgress == true)
        {
            e.CanExecute = false;
        }
        else
        {
            e.CanExecute = true;
        }
    }

如果没有找到资源,它将返回null。您可以添加空检查来避免InvalidCastException。