4

アプリケーションに MainWindow があります。MainWindow は、その ContentControl で UserControl をホストします (これを MainPage と呼びます)。MainPage は、あらゆる種類のコントロールを含む別の UserControl をホストします (KiviPage)。

MainPage のデータベースに接続し、KiviPage にファイルをロードしようとしています。2 つの操作のいずれかが失敗した場合 (データベースへの接続またはファイルの読み込み)、アプリケーションを終了する必要があります。つまり、ユーザー コントロールからアプリケーションを終了する必要があります。

これを行う最良の方法は何ですか?

4

2 に答える 2

3

ユーザー コントロールの背後にあるコードから "Shutdown" を呼び出すだけです。

Application.Current.Shutdown();
于 2013-07-13T04:38:01.630 に答える
1

添付の を介してこのアクションを実装できると思います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" ... />
于 2013-07-13T08:52:25.743 に答える