Wpf 这样的动态字符串控件可以用XAML编写吗?
编辑-为了更好地表达我的实际问题,我修改了原文Wpf 这样的动态字符串控件可以用XAML编写吗?,wpf,mvvm,Wpf,Mvvm,编辑-为了更好地表达我的实际问题,我修改了原文 我对在WPF应用程序中实现这样的控件感兴趣。基本上它是一个字符串集合——你可以在空白区域中单击,并键入一个新的字符串,并输入将提交一个新的项目到列表中。您可以单击“x”按钮删除项目 下面的截图来自一个网站,但我不得不想象我可以在WPF中实现同样的效果。似乎可以用一个样式化的列表框来完成,mabye 我遇到的最大问题是,当我试图查找它时,我甚至不知道这样的控件将被命名为什么,因此研究一直是一个非起点。我很沮丧,因为我无法开始研究这一点,因为我缺乏关
我对在WPF应用程序中实现这样的控件感兴趣。基本上它是一个字符串集合——你可以在空白区域中单击,并键入一个新的字符串,并输入将提交一个新的项目到列表中。您可以单击“x”按钮删除项目 下面的截图来自一个网站,但我不得不想象我可以在WPF中实现同样的效果。似乎可以用一个样式化的列表框来完成,mabye 我遇到的最大问题是,当我试图查找它时,我甚至不知道这样的控件将被命名为什么,因此研究一直是一个非起点。我很沮丧,因为我无法开始研究这一点,因为我缺乏关于搜索内容的想法
我对此很好奇,所以我快速验证了一种方法的概念 我使用了绑定到项目集合的
ItemsControl
ItemsPanelTemplate
是一个WrapPanel
,而ItemTemplate
是一个自定义模板。还有一个DataTrigger
用于将最后一项的模板更改为文本输入的无边框TextBox
<Grid>
<TextBox IsHitTestVisible="False" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" /> <!-- For Border -->
<ItemsControl ItemsSource="{Binding Values}" Margin="4">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Border BorderBrush="Gray" BorderThickness="1" CornerRadius="4" Padding="4">
<TextBlock Text="{Binding SomeString}" />
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Value}" Value="0">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox Text="{Binding SomeString}" BorderThickness="0" Padding="5" Width="50" />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
采取类似措施并添加额外功能应该非常容易:
可以更新,使其看起来像您拥有的一样。我猜ItemTemplate
用于将文本值转换为底部条形图的IValueConverter
Color
上的X按钮可以绑定到ItemTemplate
以从列表中删除项目,并且可以将当前对象绑定为ICommand
以了解要删除的项目CommandParameter
- 当TextBox发生更改时,可以使用PropertyChange通知来发出信号,指示它应该翻转开关,使列表中的最后一项成为“已保存”项,并为TextBox绑定添加另一个“新”项
这也是我喜欢与WPF合作的原因之一!几乎可以轻松地进行任何我想要的控制D在我看来就像一张卡片。许多轴网可以切换到这样的视图。(我使用的是超网格,它可以做这样的卡片视图。(出于好奇,你在哪个网站上看到的?)。我不知道是否有现有控件,但我相信您可以使用类似的
ItemsControl
模板来为项目使用WrapPanel
,并使用自定义的ItemsPanelTemplate
。还可以自定义添加一个TextBox
,在最末端没有边框用于文本输入。这是一个列表框或者使用WrapPanel对ItemsPanel进行ItemsControl。ItemsSource将绑定到一个可观察的集合Color
、String
、Int32(ARGB quad是32位)或漂浮在船上的任何内容。然后,给ItemTemplate一个DataTemplate,以颜色显示内容,并对delete按钮进行一些小的修改(这是一个带有ControlTemplate的按钮,显示了一个非常简单的路径)。不需要自定义控件。将其作为一种样式编写以供重用。这看起来像是一个卡片视图。许多“用于支付”控件套件有它们。下面是一个关于如何将列表视图转换为卡片视图的堆栈溢出答案:哦,我在考虑最后一个TextBox项,您甚至不需要任何自定义内容。只需使绑定项包含类似于IsNewItem=True
,并使用DataTrigger使用无边框TextBox为该项绘制模板即可。然后,在更改文本后,可以将其更改为适当的项目,并在末尾添加另一个新项目:)