我需要加載並使用XAML文件。WPF:加載XAML文件,其中包含x:代碼元素
我已經寫了簡單的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'。
我發現這樣的信息here:
碼X中聲明:代碼WPF有幾個明顯的侷限性: ... X:類指令必須提供父根元素。 ...
但是,如果我在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文件已刪除。
謝謝你的聯繫。 來自文檔: >放置在x:代碼中的代碼將被處理爲 >編譯處於已經爲該XAML >頁面創建的部分類的範圍內。因此,您定義的所有代碼必須是成員 >或該分部類的變量。 我將無法使用x:不帶部分類的代碼。 :((( –
)我想寫AutoLISP到AutoCAD的函數,以便從LISP中打開WPF窗口。如果事件處理函數的連接不能在沒有partial類或沒有code.NET的情況下進行,不會幫助我。 –