0

WPFでビジュアルフォームデザイナを実装しようとしています。ユーザーがいくつかのコントロール(テキストボックス、テキストブロック、コンボボックス、チェックボックス、画像、ボタン)をドラッグアンドドロップできるキャンバスがあります。ここまでは順調ですね。今、私は、ユーザーがキャンバスに配置したすべてのコントロールを一覧表示するコンボボックスを実装しようとしています(VS 2008のように)。

コンボボックスには、コントロールのNameプロパティが表示されます。ボタンとチェックボックスを除くすべてのコントロールでうまく機能し、その理由がわかりません。コンボボックスはObservableCollectionにバインドされており、コンボボックスのアイテムコレクションは正しく入力されていますが、ボタンまたはチェックボックスを選択すると、名前がSelectedItemとして表示されません。これが私のバインディングです:

<ComboBox Name="comboBoxCurrentControls" IsEditable="false"
          ItemsSource="{Binding AllFormControls}" DisplayMemberPath="Name" 
          SelectedValuePath="Name"
          SelectedItem="{Binding Path=SelectedCtl, Mode=TwoWay}"

ObservableCollection<T>コードビハインドにボタンを入力し、コンボボックスをバインドするだけで、問題を再現できます。コンボボックスは、ボタンを選択したときに、ボタンの名前をSelectedItemとして表示しません。誰かが私にこの振る舞いを説明したり、これの回避策を教えてもらえますか?

前もって感謝します

クリス

追伸:私も使おうとしましObservableCollection<FrameworkElement>たが、役に立ちませんでした。

4

1 に答える 1

0

問題は、Button が ContentControl であるため、ボタンが選択されると、ComboBox の SelectionBoxItem が Button 自体ではなく Content プロパティを使用することです。指定されたバインディングを使用して、コンテンツの Name プロパティを見つけようとします (これは文字列だと思いますか?)。これは、バインディング エラーの出力を調べることで発見できます。次のように表示されます。

System.Windows.Data エラー: 40: BindingExpression パス エラー: 'Name' プロパティが 'object' ''String' (HashCode=1231357559)' に見つかりません。BindingExpression:パス=名前; DataItem='String' (HashCode=1231357559); ターゲット要素は 'TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'String') です

Snoop を使用する場合、ボタンをクリックすると、SelectionBoxItem がボタンのコンテンツであることがわかりますが、別のコントロールを選択すると、それはコントロール自体になります。

編集:少しグーグルで、私はこれに出くわしました:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7054a9c9-fec1-463a-9568-b831729acd14

于 2012-05-23T13:08:54.383 に答える