質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

10869閲覧

WPFのデータバインディングで例外が発生し困っています

programmer010

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/05/12 09:29

編集2017/05/15 00:16

###前提・実現したいこと
WindowsフォームアプリケーションからWPFアプリケーション(DLL)を呼び出してデータをバインドしようとしているのですが、例外が発生してしまいます。

例外が発生する箇所は下記ソースコードWpfApplicationのWindow_Loaded()内の「xow.WriteNode(xxr);」です。

いろいろ調べておりますが、解決策が見つからず困っております。
もしおわかりの方がおられましたら、ご教授いただけると幸いです。

何卒、よろしくお願い申し上げます。

###発生している問題・エラーメッセージ

'System.Windows.Markup.XamlParseException' の初回例外が PresentationFramework.dll で発生しました。 追加情報: 型 'TextBox' の 'Text' プロパティで 'Binding' を設定することはできません。'Binding' は、DependencyObject の DependencyProperty でのみ設定できます。

###該当のソースコード
ClassLibrary

C#

1namespace ClassLibrary1 2{ 3 public class Class1 4 { 5 public string name { get; set; } 6 } 7}

WpfApplication

C#

1namespace WpfApplication1 2{ 3 public partial class MainWindow : Window 4 { 5 public ClassLibrary1.Class1 obj { get; set; } 6 7 public MainWindow() 8 { 9 InitializeComponent(); 10 } 11 12 private void Window_Loaded(object sender, RoutedEventArgs e) 13 { 14 this.pageGrid.DataContext = obj; 15 XamlXmlReader xxr = new XamlXmlReader("UserControl.xaml"); 16 XamlObjectWriter xow = new XamlObjectWriter(xxr.SchemaContext); 17 while (xxr.Read()) 18 { 19 xow.WriteNode(xxr); 20 } 21 this.pageGrid.Children.Add((UIElement)xow.Result); 22 } 23 } 24}

XAML(MainWindow.xaml)

<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="400" Width="525" Loaded="Window_Loaded"> <Grid> <Grid Name="pageGrid" /> </Grid> </Window>

XAML(UserControl.xaml)

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid Height="300" Width="400"> <TextBox Text="{Binding name}" /> </Grid> </UserControl>

WindowsFormsApplication

C#

1namespace WindowsFormsApplication1 2{ 3 public partial class Form1 : Form 4 { 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private void button1_Click(object sender, EventArgs e) 11 { 12 ClassLibrary1.Class1 obj = new ClassLibrary1.Class1(); 13 obj.name = this.textBox1.Text; 14 15 var window = new WpfApplication1.MainWindow(); 16 ElementHost.EnableModelessKeyboardInterop(window); 17 window.obj = obj; 18 window.ShowDialog(); 19 } 20 } 21}

###補足情報(言語/FW/ツール等のバージョンなど)
OS:Windows7 64bit
FW:.NET Framework 4 Client Profile
IDE:Visual Studio 2010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

XamlSchemaContext を指定する必要があると思います。
以下でどうでしょうか?

C#

1var xamlContext = System.Windows.Markup.XamlReader.GetWpfSchemaContext(); 2var xr = XmlReader.Create("UserControl.xaml"); 3var xxr = new XamlXmlReader(xr, xamlContext); 4 5XamlObjectWriter xow = new XamlObjectWriter(xxr.SchemaContext); 6while (xxr.Read()) 7{ 8 xow.WriteNode(xxr); 9} 10this.pageGrid.Children.Add((UIElement)xow.Result);

投稿2017/05/22 03:27

ebiryo

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programmer010

2017/05/23 03:02

ご回答いただいた内容で解決しました。 本当にありがとうございました。
guest

0

よくわからないのですが、WPF側は、DataContext に表示したいオブジェクトを放り込むだけでいいはずですよ?
動的に行を増やすとかするなら、ItemsCotrolsを使うといいと思います。

投稿2017/05/15 02:31

kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programmer010

2017/05/15 09:27

ご回答ありがとうございます。 WPF側でDataContext にオブジェクトを設定しているのですが、XAMLを外部ファイルにしているのが原因なのかうまくバインドできません。 やりたいことは、外部のXAMLファイルでレイアウトを定義して表示させることです。 ItemsCotrolsについて調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問