CrissCross 2.0.6

dotnet add package CrissCross --version 2.0.6                
NuGet\Install-Package CrissCross -Version 2.0.6                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="CrissCross" Version="2.0.6" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add CrissCross --version 2.0.6                
#r "nuget: CrissCross, 2.0.6"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互式工具或脚本的源代码中,以引用包。
// Install CrissCross as a Cake Addin
#addin nuget:?package=CrissCross&version=2.0.6

// Install CrissCross as a Cake Tool
#tool nuget:?package=CrissCross&version=2.0.6                

CrissCross

基于 ReactiveUI 的项目的导航框架

Alt

CrissCross

CrissCross CI-Build

什么是 CrissCross?

CrissCross 是针对基于 ReactiveUI 的项目的导航框架。它专为与 ReactiveUI 一起使用而设计,但也可以调整以用于任何 MVVM 框架。

为什么使用 CrissCross?

CrissCross 设计成一个简单、轻量级且易于使用的导航框架。它专为与 ReactiveUI 一起使用而设计。

如何使用 CrissCross?

步骤 1:安装 CrissCross

CrissCross 可在 NuGet 上找到。您可以使用 NuGet 包管理器进行安装

Nuget Nuget

Install-Package CrissCross

Nuget Nuget

Install-Package CrissCross.WPF

Nuget Nuget

Install-Package CrissCross.XamForms

Nuget Nuget

Install-Package CrissCross.MAUI

Nuget Nuget

Install-Package CrissCross.Avalonia

Nuget Nuget

Install-Package CrissCross.WinForms

第2步:创建一个ViewModel

创建一个继承自RxObject的ViewModel。这是用于MainWindow的ViewModel。

    public class MainWindowViewModel : RxObject
    {
        public MainWindowViewModel()
        {
            this.BuildComplete(() =>
            {
                // Do something when the IOC Container is built
            });

            // Setup the IOC Container
            Locator.CurrentMutable.RegisterConstant<MainViewModel>(new());
            Locator.CurrentMutable.Register<IViewFor<MainViewModel>>(() => new MainView());

            Locator.CurrentMutable.RegisterConstant<FirstViewModel>(new());
            Locator.CurrentMutable.Register<IViewFor<FirstViewModel>>(() => new FirstView());
            
            // Notify the application that the IOC Container that it is complete and ready to use.
            Locator.CurrentMutable.SetupComplete();
        }
    }

第3步:创建一个View

创建一个继承自NavigationWindow的View。这是用于MainWindow的View。在XAML中添加xmlns:rxNav="https://github.com/reactivemarbles/CrissCross",将Window更改为rxNav:NavigationWindow。在XAML中将Window更改为rxNav:NavigationWindow。添加x:TypeArguments="local:MainWindowViewModel"

    public partial class MainWindow : NavigationWindow<MainWindowViewModel>
    {
        public MainWindow()
        {
            // Remember to set x:Name in XAML to "mainWindow"
            InitializeComponent();
            
            this.WhenActivated(disposables =>
            {
                // Do something when the View is activated

                // Configure the Navigation for the MainWindow
                NavBack.Command = ReactiveCommand.Create(() => this.NavigateBack(), CanNavigateBack).DisposeWith(d);
                
                // Navigate to the MainViewModel
                this.NavigateToView<MainViewModel>();
            });
        }
    }

第4步:创建一个ViewModel

创建一个继承自RxObject的ViewModel。这是用于MainView的ViewModel。

    public class MainViewModel : RxObject
    {
        public MainViewModel()
        {
            this.BuildComplete(() =>
            {
                // Do something when the IOC Container is built

                // Configure the Navigation for the MainViewModel using, you will pass the name of the Navigation Host Window that you want to navigate with.
                this.NavigateBack("mainWindow")
                this.CanNavigateBack("mainWindow")
                this.NavigateToView<FirstViewModel>("mainWindow")
            });
        }
    }

第5步:创建一个View

创建一个继承自ReactiveUserControl的View。这是用于MainView的View。

    public partial class MainView : ReactiveUserControl<MainViewModel>
    {
        public MainView()
        {
            InitializeComponent();

            this.WhenActivated(disposables =>
            {
                // Do something when the View is activated
            });
        }
    }

第6步:对于WPF应用程序配置单实例应用程序(如果需要)

如果希望防止应用程序同时运行多个实例,可以使用Make.SingleInstance方法。

    protected override void OnStartup(StartupEventArgs e)
    {
        // This will prevent multiple instances of the application from running at the same time.
        Make.SingleInstance("MyUniqueAppName ddd81fc8-9107-4e33-b848-cac4c3ec3d2a");
        base.OnStartup(e);
    }

第7步:运行应用程序

运行应用程序并应看到MainView。

Avalonia

步骤 1:安装 CrissCross

CrissCross 可在 NuGet 上找到。您可以使用 NuGet 包管理器进行安装

Install-Package CrissCross.Avalonia

第2步:创建一个ViewModel

创建一个继承自RxObject的ViewModel。这是用于MainWindow的ViewModel。

    public class MainWindowViewModel : RxObject
    {
        public MainWindowViewModel()
        {
            this.BuildComplete(() =>
            {
                // Do something when the IOC Container is built
            });

            // Setup the IOC Container
            Locator.CurrentMutable.RegisterConstant<MainViewModel>(new());
            Locator.CurrentMutable.Register<IViewFor<MainViewModel>>(() => new MainView());

            Locator.CurrentMutable.RegisterConstant<FirstViewModel>(new());
            Locator.CurrentMutable.Register<IViewFor<FirstViewModel>>(() => new FirstView());
            
            // Notify the application that the IOC Container that it is complete and ready to use.
            Locator.CurrentMutable.SetupComplete();
        }
    }

第3步:创建一个NavigationView

创建一个继承自NavigationWindowNavigationUserControl的View。这是用于MainWindow的View。在XAML中添加xmlns:rxNav="https://github.com/reactivemarbles/CrissCross",将Window更改为rxNav:NavigationWindow。或在XAML中将UserControl更改为rxNav:NavigationUserControl。

Avalonia有两种操作模式,您需要为应用程序选择正确的模式。

    public partial class MainWindow : NavigationWindow<MainWindowViewModel>
    {
        public MainWindow()
        {
            // Remember to set x:Name in XAML to "mainWindow"
            InitializeComponent();
            
            this.WhenActivated(disposables =>
            {
                // Do something when the View is activated

                // Configure the Navigation for the MainWindow
                NavBack.Command = ReactiveCommand.Create(() => this.NavigateBack(), CanNavigateBack).DisposeWith(d);
                
                // Navigate to the MainViewModel
                this.NavigateToView<MainViewModel>();
            });
        }
    }

第4步:创建一个ViewModel

创建一个继承自RxObject的ViewModel。这是用于MainView的ViewModel。

    public class MainViewModel : RxObject
    {
        public MainViewModel()
        {
            this.BuildComplete(() =>
            {
                // Do something when the IOC Container is built

                // Configure the Navigation for the MainViewModel using, you will pass the name of the Navigation Host Window that you want to navigate with.
                this.NavigateBack("mainWindow")
                this.CanNavigateBack("mainWindow")
                this.NavigateToView<FirstViewModel>("mainWindow")
            });
        }
    }

第5步:创建一个View

创建一个继承自ReactiveUserControl的View。这是用于MainView的View。

    public partial class MainView : ReactiveUserControl<MainViewModel>
    {
        public MainView()
        {
            InitializeComponent();

            this.WhenActivated(disposables =>
            {
                // Do something when the View is activated
            });
        }
    }

CrissCross.WPF.Plot

CrissCross.WPF.Plot是一个为WPF应用程序提供简单绘图方式的库。它设计用于与CrissCross一起使用。

Adriana Segher提出了创建可以接受响应式数据源的Plot的初步概念。然后将其开发成一个可以与CrissCross Wpf一起使用的库。

该库基于ScottPlot构建,为WPF应用程序提供了一种简单的方式来绘制响应式数据。

该库可在NuGet上找到。您可以使用NuGet包管理器进行安装

Nuget Nuget

Install-Package CrissCross.WPF.Plot

当前功能

  • 从响应式数据源中绘图数据
  • 从具有多个序列的响应式数据源数组的索引中绘图数据(目前限制为9个)
  • 通过CrossHair进行光标跟踪
  • 缩放和平移
  • 拖动缩放区域
  • 绘图的可视性
  • 自动缩放/手动缩放
  • 启用/禁用与绘图交互
  • 多个Y轴

未来功能

  • 超过9个序列
  • 通过属性对话框配置图表
  • 轴配置、颜色配置、缩放配置、线条配置
  • 多个具有差分分析的CrossHairs
  • XY图的多条X轴
  • 从大型数据源(如动态数据源)中选择可绘制的数据
产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net6.0-windows10.0.17763 兼容。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 net8.0-windows10.0.17763 兼容。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 兼容。 net48 兼容。 net481 已计算。
MonoAndroid monoandroid 已计算。 monoandroid13.0 兼容。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 兼容。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。 xamarinios10 兼容。
Xamarin.Mac xamarinmac 已计算。 xamarinmac20 兼容。
Xamarin.TVOS xamarintvos 已计算。 xamarintvos10 兼容。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
有关目标框架.NET Standard的更多信息。

NuGet 包 (5)

显示依赖于 CrissCross 的前 5 个 NuGet 包

下载
CrissCross.WPF

为 ReactiveUI 提供反应式导航框架

CrissCross.XamForms

为 ReactiveUI 提供反应式导航框架

CrissCross.MAUI

为 ReactiveUI 提供反应式导航框架

CrissCross.Avalonia

为 ReactiveUI 提供反应式导航框架

CrissCross.WinForms

为 ReactiveUI 提供反应式导航框架

GitHub 仓库

此包未被任何流行 GitHub 仓库使用。

版本 下载 最后更新
2.0.6 60 8/2/2024
2.0.5 65 8/1/2024
2.0.4 44 7/31/2024
2.0.3 81 7/28/2024
2.0.2 85 7/25/2024
2.0.1 123 7/10/2024
2.0.0 139 5/18/2024
1.0.25 203 4/30/2024
1.0.24 148 4/19/2024
1.0.23 147 4/10/2024
1.0.22 156 3/29/2024
1.0.21 159 3/26/2024
1.0.20 164 3/22/2024
1.0.19 173 3/21/2024
1.0.18 163 3/19/2024
1.0.17 172 3/14/2024
1.0.16 177 3/13/2024
1.0.15 171 3/12/2024
1.0.14 183 3/11/2024
1.0.13 156 3/8/2024
1.0.12 176 3/7/2024
1.0.11 158 3/5/2024
1.0.10 180 2/22/2024
1.0.9 166 2/21/2024
1.0.8 158 2/21/2024
1.0.7 157 2/19/2024
1.0.6 151 2/16/2024
1.0.5 191 2/8/2024
1.0.4 201 1/4/2024
1.0.3 317 9/11/2023
1.0.2 228 9/9/2023
1.0.1 210 9/8/2023
1.0.0 223 9/7/2023
0.9.2 219 9/6/2023
0.9.1 234 8/6/2023
0.9.0 228 7/12/2023
0.8.0 207 6/23/2023
0.7.1 261 4/28/2023
0.7.0 347 3/14/2023
0.6.0 328 3/13/2023
0.5.0 355 3/11/2023
0.2.0 373 2/7/2023
0.1.0 424 1/7/2023

与 Net 6/8 和 netstandard2.0 的兼容性