2013-07-13 4 views
4

내 응용 프로그램에 MainWindow가 있습니다. MainWindow는 ContentControl에 UserControl을 호스팅합니다 (이 MainPage를 호출합니다). MainPage는 모든 종류의 컨트롤 (KiviPage)을 포함하는 다른 UserControl을 호스트합니다.사용자로부터 응용 프로그램을 종료하십시오.

MainPage에서 데이터베이스에 연결하고 KiviPage에서 파일을로드하려고합니다. 두 작업 중 하나라도 실패하면 (데이터베이스 또는 파일로드 연결) 응용 프로그램을 종료해야합니다. 즉, 사용자 컨트롤에서 응용 프로그램을 종료해야한다는 의미입니다.

가장 좋은 방법은 무엇입니까?

답변

1

나는 생각한다, 당신은 첨부 DependencyProperty을 통해이 작업을 구현할 수있다. 뭐 그런 (이 간단한 작업 예제) : 당신은 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();    
      } 
     } 
    } 
} 

만 코드와 전화를 통해 사용할 수 있습니다 그것 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" ... /> 
3

간단하게 사용자 정의 컨트롤의 "Shutdown" from code behind 전화 :

Application.Current.Shutdown(); 
+0

합니다. 둘 다 (DB 연결 및 파일로드)는 컨트롤에 바인딩 된 속성입니다. – WAQ

관련 문제