![](/img/trans.png)
[英]XAML markup error when binding List<string> to a ComboBox ItemSource in a WPF
[英]WPF Binding Error for ComboboxItem when using the ItemSource
我有一個WPF應用程序(.Net 4.5.1),可以在組合框中動態創建項目,並使用可觀察的集合綁定到ItemSource。 但是,當我這樣做時,對於我添加的每個項目,我都會遇到兩個綁定錯誤,一個是VeticalContentAlignment,一個是HorizontalContentAlignment。
System.Windows.Data Error: 4 :
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''.
BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ComboBoxItem' (Name='PhoneItem');
target property is 'VerticalContentAlignment' (type 'VerticalAlignment')
我用Google搜索,發現了一些三分球沒有幫助 ,如添加全局樣式
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
或在組合框中定義嵌入式容器樣式。
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
</ComboBox.ItemContainerStyle>
我可以在一個干凈的項目中重現此代碼,該項目沒有樣式,只有組合框綁定到可觀察的集合,如果有人對我的剝離代碼感興趣的話。
更新1-我的XAML和背后的代碼
<Window x:Class="WpfApplicationDynamicComboBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<Button Click="ButtonBase_OnClick" Margin="5">Load Combobox</Button>
<ComboBox Name="DynamicComboBox"
ItemsSource="{Binding MyItems}"
Width="400"/>
</StackPanel>
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
MyItems = new ObservableCollection<ComboBoxItem>();
MyItems.Add( new ComboBoxItem {Content = string.Format( "Phone: {0}", "123" ), Name = "PhoneItem_" + DateTime.Now.Second} );
}
public ObservableCollection<ComboBoxItem> MyItems { get; set; }
private void ButtonBase_OnClick( object sender, RoutedEventArgs e )
{
MyItems.Add( new ComboBoxItem {Content = string.Format( "Phone: {0}", "123" ), Name = "PhoneItem_" + DateTime.Now.Second} );
}
}
更新2-鏈接到示例項目 http://bit.ly/1fwvgkZ
擺脫這些錯誤的任何幫助將不勝感激!
好的,可以解決您的錯誤。 只需將您的代碼替換為
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
MyItems = new ObservableCollection<ComboBoxItem>();
MyItems.Add(new ComboBoxItem
{
Name = "PhoneItem_" + DateTime.Now.Second,
Content = string.Format("Phone: {0}", "123"),
HorizontalContentAlignment = HorizontalAlignment.Left,
VerticalContentAlignment = VerticalAlignment.Center
});
}
public ObservableCollection<ComboBoxItem> MyItems { get; set; }
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
MyItems.Add(new ComboBoxItem
{
Name = "PhoneItem_" + DateTime.Now.Second,
Content = string.Format("Phone: {0}", "123"),
HorizontalContentAlignment = HorizontalAlignment.Left,
VerticalContentAlignment = VerticalAlignment.Center
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.