2011-07-13 14 views
1

WPFアプリケーションでウィンドウ間の共通の動作を定義しようとしています。たとえば、 すべてのダイアログに特定の方法を設定し、閉じるためにエスケープキーに応答する必要があります。WPF共通ウィンドウの動作

共有ベースクラスから継承する方法はありますか? xamlはxamlに名前空間を含めることでこれを試すたびに大騒ぎをする。

ありがとうございます。

+0

ただ1つのWindowクラスを定義して、それ以外のすべてのUserControlsをWindowのインスタンスに読み込むことができますか? –

答えて

2

何が本当にしたいことは、あなたのWindowsのための一般的なスタイルであるような音、トピックの周りの議論についてはこちらをご覧ください:How to set default WPF Window Style in app.xaml?

それでもベースウィンドウクラスを使用する場合は、以下の私の作品:

XAML:背後

<WpfApplication1:BaseWindow x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:WpfApplication1="clr-namespace:WpfApplication1"> 

    <StackPanel> 
     <Button Content="Click me" /> 
    </StackPanel> 

</WpfApplication1:BaseWindow> 

コード:

using System.Windows; 
using System.Windows.Media; 

namespace WpfApplication1 
{ 
    public class BaseWindow : Window 
    { 
     public BaseWindow() 
     { 
      Background = Brushes.Red; 
      KeyDown += (sender, e) => { if (e.Key == Key.Escape) Close(); }; 
     } 
    } 

    public partial class Window1 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 
    } 
} 
1

基本クラスメソッドはここに記述されています:http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx、私はそれを試して、それは私のために働いた。あなたは、基本クラスをそのようまたは類似を定義することがあります。

public class BaseWindow : Window 
{ 
    public BaseWindow() 
    { 
     this.KeyDown += (sender, e) => 
     { 
      //Checking wether escape is pressed... 
     }; 
    } 
} 

次に、あなたが簡単になりましたことを使用することができます:あなたはあまりにも分離コードで基底クラスを変更する必要があります。もちろん、

<local:BaseWindow x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Test" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 

</Grid></local:BaseWindow> 

関連する問題