3

XAML ファイルを読み込んで使用する必要があります。

簡単な XAML ファイルを作成しました。

<Window      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="150" d:DesignWidth="300" Title="My Window">
    <x:Code>
        <![CDATA[
            void btnMyButton_Click_1(object sender, RoutedEventArgs e) {
                MessageBox.Show("Hello world", "Message", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        ]]>
    </x:Code>
    <Grid>
        <Button x:Name="btnMyButton" x:FieldModifier="public" Margin="10" Padding="10" 
                FontSize="20" Click="btnMyButton_Click_1">My button</Button>
    </Grid>
</Window>

次に、この XAML をコードに読み込もうとします。

String curDir = io.Path.GetDirectoryName(typeof(Lisp_Wpf.Commands).Assembly.Location);
String xamlFileName = "MyWindow.xaml";
String fileFullName = io.Path.Combine(curDir, xamlFileName);
DependencyObject depObj = default(DependencyObject);
using (io.FileStream fs = new io.FileStream(fileFullName, io.FileMode.Open)) {
    depObj = XamlReader.Load(fs) as DependencyObject;
    fs.Close();
}
if (depObj != null && depObj is Window) {
    Window win = (Window)depObj;
    acad.ShowModalWindow(win);
}

しかし、例外が発生します:

System.Windows.Markup.XamlParseException が発生しました: 'テキスト 'btnMyButton_Click_1' から 'クリック' を作成できませんでした。行番号「16」および行位置「31」。

ここでそのような情報を見つけました:

x:Code for WPF 内で宣言されたコードには、いくつかの重要な制限があります。 ... x:Class ディレクティブは、親ルート要素で提供する必要があります。...

しかし、Window要素にx:Class属性を追加すると:

x:Class="Lisp_Wpf.MainWindow"

その後、例外が発生します:

「指定されたクラス名 'Lisp_Wpf.MainWindow' は、実際のルート インスタンス タイプ 'System.Windows.Window' と一致しません。Class ディレクティブを削除するか、XamlObjectWriterSettings.RootObjectInstance を介してインスタンスを提供してください。行番号「1」と行位置「14」。

私の MS Visual Studio プロジェクトでは、XML ファイルに次のプロパティがあります。出力ディレクトリにコピー = 常にコピー。カスタム ツール = (空の文字列);

この XAML の部分的な CS ファイルを削除しました。

4

2 に答える 2

3

実行時に xaml をロードする場合は、XAML ファイルの背後にコードを指定することはできません。おそらく、ボタン クリックの一般的なイベントをアタッチし、実行時にコントロールを識別することができます。以下のリンクを見て試してみてください。

実行時に XAML XML を読み込んでいますか?

于 2012-12-06T17:30:47.360 に答える