2013-07-13 24 views
4

我的應用程序中有一個MainWindow。 MainWindow在其ContentControl中託管一個UserControl(我稱之爲MainPage)。 MainPage進入主機的另一個用戶控件,其中包含各種控件(KiviPage)。退出用戶的應用程序控制

我想連接到MainPage中的數據庫並在KiviPage中加載文件。如果兩個操作中的任何一個失敗(連接到數據庫或文件加載),我必須退出應用程序。這意味着我必須退出用戶控件的應用程序。

最好的辦法是做什麼?

回答

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> 

Als O,可以通過行爲的代碼直接訪問它:

ProgramBehaviours.SetShutdown(SomeControl, Value); 

或者從XAML無條件:

<SomeControl local:ProgramBehaviours.SetShutdown="True" ... /> 
3

簡單地調用用戶控件的"Shutdown" from code behind

Application.Current.Shutdown(); 
+0

我不能在代碼隱藏代碼。兩者(數據庫連接和文件加載)都是綁定到控件的屬性。 – WAQ