■51815 / inTopicNo.1) |
XAMLを読み込みWindowを表示したい |
□投稿者/ KEN (1回)-(2010/07/21(Wed) 11:08:24)
|
分類:[VB.NET/VB2005 以降]
お世話になります。
【環境】
WinXPsp3+VB2008
【やりたいこと】
(1) Wpfアプリケーションで、Windowの今の状態をXAMLで保存する
(2) 保存したXAMLを読み込み、新規Windowとして表示する。
【発生するエラー】
以下の(2)のコードの Dim w As Window = Markup.XamlReader.Load(xr) のところで以下のエラーがでます。
'BtnSave' 値をオブジェクト 'System.Windows.Controls.Button' のプロパティ 'Name' に割り当てることはできません。
このスコープでは、重複した Name 'BtnSave' を登録できません。
マークアップ ファイル 'C:/Documents and Settings/user/デスクトップ/hoge.xaml'
行 1 位置 219 のオブジェクト 'BtnSave' にエラーがあります。
どのようにコーディングすればよいのでしょうか?
よろしくお願い致します。
【やってみたこと】
(1)のコード
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnsave.Click
Dim dlg As New Microsoft.Win32.SaveFileDialog
If dlg.ShowDialog Then
Dim saveXAML As String
saveXAML = Markup.XamlWriter.Save(Me)
Dim sw As New System.IO.StreamWriter(dlg.FileName, False, System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(saveXAML)
sw.Close()
End If
End Sub
(2)のコード
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnLoad.Click
Dim dlg As New Microsoft.Win32.OpenFileDialog
If dlg.ShowDialog Then
Dim sr As New System.IO.StreamReader(dlg.FileName, System.Text.Encoding.GetEncoding("UTF-8"))
Dim readXaml As String = sr.ReadToEnd
sr.Close()
Dim s As New IO.StringReader(readXaml)
Dim xr As Xml.XmlReader = Xml.XmlReader.Create(dlg.FileName)
Dim w As Window = Markup.XamlReader.Load(xr)
w.Show()
End If
End Sub
【読み込もうとしたXAML】
<Window2 Title="Window2" Width="300" Height="300" Visibility="Visible"
xmlns="clr-namespace:WpfApplication1;assembly=XamlReader"
xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<av:Grid>
<av:Button Name="BtnSave" Width="75" Height="23" Margin="34,51,0,0" HorizontalAlignment="Left" VerticalAlignment="Top">Save</av:Button>
<av:TextBox Name="TextBox1" Height="23" Margin="22,103,136,0" VerticalAlignment="Top">hoge</av:TextBox>
<av:Button Name="btnLoad" Width="75" Height="23" Margin="0,51,35,0" HorizontalAlignment="Right" VerticalAlignment="Top">Load</av:Button>
</av:Grid>
</Window2>
|
|