2013-07-13 2 views
4

У меня есть приложение MainWindow в моем приложении. MainWindow размещает UserControl в своем ContentControl (я называю это MainPage). MainPage переходит на хосты другого UserControl, который содержит на нем всевозможные элементы управления (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, который доступен только через код и вызова это a XAML:

<DataTrigger Binding="{Binding ElementName=SomeControl, Path=Tag}" Value="Shutdown"> 
    <Setter Property="local:ProgramBehaviours.Shutdown" Value="True" /> 
</DataTrigger> 

Als о, вы можете получить к нему доступ непосредственно через кодекс поведения:

ProgramBehaviours.SetShutdown(SomeControl, Value); 

Или из XAML без условия:

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

Просто позвоните "Shutdown" from code behind пользовательского элемента управления:

Application.Current.Shutdown(); 
+0

Я не могу код в CodeBehind. Оба (соединение с БД и загрузка файлов) являются свойствами, привязанными к элементам управления. – WAQ

Смежные вопросы