我的应用程序中有一个 MainWindow。MainWindow 在其 ContentControl 中托管一个 UserControl(我称之为 MainPage)。MainPage 进入另一个包含各种控件的 UserControl(KiviPage)。
我正在尝试连接到 MainPage 中的数据库并在 KiviPage 中加载文件。如果这两个操作中的任何一个失败(连接到数据库或文件加载),我必须退出应用程序。这意味着我必须从用户控件中退出应用程序。
最好的方法是什么?
我的应用程序中有一个 MainWindow。MainWindow 在其 ContentControl 中托管一个 UserControl(我称之为 MainPage)。MainPage 进入另一个包含各种控件的 UserControl(KiviPage)。
我正在尝试连接到 MainPage 中的数据库并在 KiviPage 中加载文件。如果这两个操作中的任何一个失败(连接到数据库或文件加载),我必须退出应用程序。这意味着我必须从用户控件中退出应用程序。
最好的方法是什么?
只需从用户控件后面的代码中调用“Shutdown” :
Application.Current.Shutdown();
我认为,您可以通过附加的DependencyProperty
. 类似的东西(这是一个简单的工作示例):
XAML
<Window x:Class="ShutdownAppHelp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ShutdownAppHelp"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="local:ProgramBehaviours.Shutdown" Value="True" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<CheckBox Content=" Shutdown" IsChecked="False" />
</Grid>
</Window>
Code behind
namespace ShutdownAppHelp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public static class ProgramBehaviours
{
// Shutdown program
public static void SetShutdown(DependencyObject target, bool value)
{
target.SetValue(ShutdownProperty, value);
}
public static readonly DependencyProperty ShutdownProperty =
DependencyProperty.RegisterAttached("Shutdown",
typeof(bool),
typeof(ProgramBehaviours),
new UIPropertyMetadata(false, OnShutdown));
// Here call function in UIPropertyMetadata()
private static void OnShutdown(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue is bool && ((bool)e.NewValue))
{
Application.Current.Shutdown();
}
}
}
}
您可以在 中放置任何类型的行为DependencyProperty
,这只能通过代码获得,并将其称为 XAML:
<DataTrigger Binding="{Binding ElementName=SomeControl, Path=Tag}" Value="Shutdown">
<Setter Property="local:ProgramBehaviours.Shutdown" Value="True" />
</DataTrigger>
此外,您可以通过行为代码直接访问它:
ProgramBehaviours.SetShutdown(SomeControl, Value);
或从 XAML 无条件:
<SomeControl local:ProgramBehaviours.SetShutdown="True" ... />