2012-05-21 7 views
0

WPF에서 시각적 폼 디자이너를 구현하려고합니다. 나는 사용자가 드래그 앤 드롭 (Textbox, Textblock, Combobox, Checkbox, Image, Button) 할 수있는 Canvas를 가지고있다. 여태까지는 그런대로 잘됐다. 이제는 사용자가 캔버스에 넣은 모든 컨트롤 (VS 2008에서와 같이)을 나열하는 콤보 상자를 구현하려고합니다.콤보 상자 WPF C# 4.0의 목록 단추 컨트롤

콤보 상자는 컨트롤의 Name 속성을 표시합니다. 그것은 버튼과 체크 상자를 제외한 모든 컨트롤에 대해 잘 작동하며 이유를 파악할 수 없습니다. 콤보 상자는 ObservableCollection에 바인딩되어 있으며 콤보 상자의 항목 컬렉션이 올바로 채워지지만 버튼이나 체크 상자를 선택하면 이름이 SelectedItem으로 표시되지 않습니다. 그래서 여기 내 바인딩된다

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

당신은 문제를 재현 할 때 버튼을 사용하면 간단하게 채우기 Codebehind가에 ObservableCollection<T>을하고 그 위에 콤보 상자를 바인딩 할 수 있습니다. 선택시 Combobox는 ButtonItem을 SelectedItem으로 표시하지 않습니다. 누군가이 동작을 설명하거나 해결 방법을 말해 줄 수 있습니까? 사전에

감사

크리스

P.s : 나는 또한 ObservableCollection<FrameworkElement>를 사용하려하지만 도움이되지 않았다.

+0

대신에 이름을 어떻게 표시됩니다 조금 인터넷 검색으로, 나는이 건너 온? – Richard

+0

아무 것도. 그것은 단순히 비어 있습니다. 그러나 comboBox가 펼쳐지면 Button/Checkbox의 이름이 목록에 있습니다. –

+0

SelectedCtl을 설정하는 코드를 제공 할 수 있습니까 –

답변

0

Button은 ContentControl이므로 단추를 선택하면 ComboBox의 SelectionBoxItem은 Button 자체가 아닌 Content 속성을 사용합니다. 지정된 바인딩을 사용하면 내용에 Name 속성을 찾으려고합니다 (문자열이라고 생각합니까?). 이는 바인딩 오류의 출력을 보면 알 수 있습니다. 다음과 같은 내용이 표시되어야합니다.

System.Windows.Data 오류 : 40 : BindingExpression 경로 오류 : 'Name'속성이 'object' ''String '(HashCode = 1231357559)'에 없습니다. BindingExpression : 경로 = 이름; DataItem = '문자열'(HashCode = 1231357559); 대상 요소는 'TextBlock'입니다 (Name = '');

Snoop을 사용하는 경우 Button을 클릭하면 SelectionBoxItem이 버튼 내용 인 것을 볼 수 있지만 다른 컨트롤을 선택하면 컨트롤입니다 (예 : 'Text'). 그 자체.

편집 : http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7054a9c9-fec1-463a-9568-b831729acd14