XAML 中用于 TextBlock 和 ComboBox 的数据模板
DataTemplate for TextBlock and ComboBox in XAML
我有这个 XAML 代码:
<Window x:Class="New_app_2.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="400" Width="500">
<Grid>
<StackPanel Orientation="Horizontal">
<ItemsControl ItemsSource="{Binding TestList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding }"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ComboBox ItemsSource="{Binding Tags}" VerticalAlignment="Top">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</Grid>
</Window>
我将 TextBlock 绑定到 属性 TestList:
private List<string> _testList;
public List<string> TestList
{
get
{
return new List<string>() { "Test1", "Test2", "Test3", "Test4", "Test5" };
}
set
{
_testList = value;
}
}
和一个 ComboBox 到 属性 标签(看起来与 TestList 属性 几乎相同,但有不同的字符串)。
我的目标是以这样的形式显示:
测试 1 [标签组合框]
Test2 [标签组合框]
Test3 [标签组合框]
Test4 [标签组合框]
Test5 [标签组合框]
相反,我得到:
测试 1 [标签组合框]
测试2
测试3
测试4
测试5
稍后,我还希望能够获得为每个 TestList 元素选择了哪些选项的信息。
可能很简单,但我才刚刚开始学习 WPF。
你不应该把 ComboBox
移动到 和 ItemsControl.ItemTemplate
吗? (然后您需要将 TextBlock
和 ComboBox
包裹在另一个面板中(例如 StackPanel
)。)
如果所有 ComboBoxes
应包含相同的项目,您将需要更改绑定以访问外部 DataContext
。
即
<ComboBox ItemsSource="{Binding DataContext.Tags,
RelativeSource={RelativeSource AncestorType=ItemsControl}}">
我有这个 XAML 代码:
<Window x:Class="New_app_2.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="400" Width="500">
<Grid>
<StackPanel Orientation="Horizontal">
<ItemsControl ItemsSource="{Binding TestList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding }"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ComboBox ItemsSource="{Binding Tags}" VerticalAlignment="Top">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</Grid>
</Window>
我将 TextBlock 绑定到 属性 TestList:
private List<string> _testList;
public List<string> TestList
{
get
{
return new List<string>() { "Test1", "Test2", "Test3", "Test4", "Test5" };
}
set
{
_testList = value;
}
}
和一个 ComboBox 到 属性 标签(看起来与 TestList 属性 几乎相同,但有不同的字符串)。
我的目标是以这样的形式显示:
测试 1 [标签组合框]
Test2 [标签组合框]
Test3 [标签组合框]
Test4 [标签组合框]
Test5 [标签组合框]
相反,我得到:
测试 1 [标签组合框]
测试2
测试3
测试4
测试5
稍后,我还希望能够获得为每个 TestList 元素选择了哪些选项的信息。
可能很简单,但我才刚刚开始学习 WPF。
你不应该把 ComboBox
移动到 和 ItemsControl.ItemTemplate
吗? (然后您需要将 TextBlock
和 ComboBox
包裹在另一个面板中(例如 StackPanel
)。)
如果所有 ComboBoxes
应包含相同的项目,您将需要更改绑定以访问外部 DataContext
。
即
<ComboBox ItemsSource="{Binding DataContext.Tags,
RelativeSource={RelativeSource AncestorType=ItemsControl}}">