WPF-与父内容内联的显示项控件

WPF-与父内容内联的显示项控件,wpf,xaml,user-interface,Wpf,Xaml,User Interface,我试图在wpf中创建一个布局,该布局将显示父类名称,然后显示与父类关联的属性列表。我使用父对象作为根DataContext,然后将ItemsControl绑定到属性的子列表 我希望显示如下所示,这样当换行时,它将显示标题ParentName下的下一个属性- ParentName-属性1、属性2、属性3 属性4、属性5和属性6 我的问题是,我不知道如何使ParentName与属性内联运行,因此它总是以水平缩进的方式显示以下行以匹配第一个属性,而不是我希望的ParentName组件 有允许这样做的容

我试图在wpf中创建一个布局,该布局将显示父类名称,然后显示与父类关联的属性列表。我使用父对象作为根DataContext,然后将ItemsControl绑定到属性的子列表

我希望显示如下所示,这样当换行时,它将显示标题ParentName下的下一个属性-

ParentName-属性1、属性2、属性3 属性4、属性5和属性6

我的问题是,我不知道如何使ParentName与属性内联运行,因此它总是以水平缩进的方式显示以下行以匹配第一个属性,而不是我希望的ParentName组件

有允许这样做的容器吗?看起来所有可用的容器都像HTML块元素。我非常希望通过XAML实现这一点,而不是代码隐藏

<DataTemplate x:Key="ItemDisplay">
    <WrapPanel Orientation="Horizontal" Grid.Column="3">
    <TextBlock Text="{Binding Description}" VerticalAlignment="Bottom"/>
    <ItemsControl Name="ToppingModificationsItemControl" ItemsSource="{Binding ItemAttributes}" VerticalAlignment="Bottom">
         <ItemsControl.ItemTemplate>
             <DataTemplate>
                 <WrapPanel Orientation="Horizontal">
                     <TextBlock Text="{Binding AttributeName}" VerticalAlignment="Bottom"/>
                 </WrapPanel>
             </DataTemplate>
         </ItemsControl.ItemTemplate>
 </ItemsControl>
   </WrapPanel>
</DataTemplate>
不是


谢谢。

看起来您想要两列。在这种情况下,我会用网格或水平堆叠面板替换外部包装。

我认为基本XAML无法做到这一点

WPF面板有点像块,我不认为有任何面板会支持你想要的ItemsPanel形状的块,它会环绕左上角的另一个对象

我只需要使用一个IValueConverter,让它将您的数据对象转换为您想要的格式的字符串

大概是这样的:

<TextBlock Text="{Binding Converter={StaticResource MyObjectToDisplayValue}" 
           TextWrapping="Wrap" ... />
StringBuilder sb = new StringBuilder(val.Description);

if (val.Attributes != null && val.Attributes.Count > 0)
{
    sb.Append(" - ");
    foreach(var a in val.ItemAttributes)
        sb.Append(a.AttributeName + ", ");
}

return sb.ToString().TrimEnd(", ");

当然,如果可以将其作为数据对象的一个属性,可能会更好,但是如果没有意义,那么转换器可能是下一个最好的选择。

我发现解决这个问题的方法是为两个集合创建一个接口,然后绑定到一个属性,该属性将返回两个列表的结果。然后设置要按类型隐式选择的模板。只需执行一个bind语句,我就可以将所有内容放在一个包装面板中。

您能提供一些代码吗?我添加了一个示例,希望我的编辑不会把任何无法识别的东西弄糟。我认为这是倒退。我希望它的工作,就好像一切都在一个单一的包装面板。第二个例子是我不想要的,我可以很容易地得到它。它与该元素中的网格或包裹面板非常相似。在网格中,它只是将项目描述放在自己的列中。有了一个包裹,我有两个项目,描述和内部包裹面板,然后并排走。我需要一个html风格的内联处理或东西,可以移植到外观。谢谢,我同意。这也是我的备份解决方案。也许这只是我正在开发的应用程序,但我似乎经常遇到这种情况,这是我可以用HTML做的事情,所以我希望我只是错过了解决方案。
<TextBlock Text="{Binding Converter={StaticResource MyObjectToDisplayValue}" 
           TextWrapping="Wrap" ... />
StringBuilder sb = new StringBuilder(val.Description);

if (val.Attributes != null && val.Attributes.Count > 0)
{
    sb.Append(" - ");
    foreach(var a in val.ItemAttributes)
        sb.Append(a.AttributeName + ", ");
}

return sb.ToString().TrimEnd(", ");