gpt4 book ai didi

wpf - 可以用 XAML 编写这样的动态字符串控件吗?

转载 作者:行者123 更新时间:2023-12-03 10:22:35 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

5年前关闭。




Improve this question




编辑 - 为了更好地表达我的实际问题,我修改了原文。

我有兴趣在 WPF 应用程序中实现这样的控件。基本上它是一个字符串的集合——你可以点击空白区域,输入一个新的字符串,然后回车将一个新的项目提交到列表中。您可以单击“x”按钮删除项目。

下面的截图来自一个网站,但我不得不想象我可以在 WPF 中完成同样的工作。似乎它可以通过样式列表框来完成,mabye?

我遇到的最大问题是,当我尝试查找此内容时,我什至不知道这样的控件会被命名为什么,因此研究一直没有开始。由于缺乏关于要搜索什么的想法,我无法开始研究这个问题,这让我感到沮丧。

screenshot

最佳答案

我对此感到好奇,因此快速证明了一种完成它的方法的概念。

enter image description here

我使用了 ItemsControl绑定(bind)到项目集合。
ItemsPanelTemplateWrapPanel ,以及 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用于将 Text 值转换为 Color用于底部的条形
  • ItemTemplate 上的 X 按钮可以绑定(bind)到 ICommand从列表中删除一个项目,并且可以将当前对象绑定(bind)为CommandParameter知道要删除哪个项目。
  • 当 TextBox 发生更改时,可以使用 PropertyChange 通知来表示它应该翻转一个开关以使列表中的最后一项成为“已保存”项,并为 TextBox 绑定(bind)添加另一个"new"项。

  • 总的来说,实现你想要的东西应该不会太难。

    这也是我喜欢使用 WPF 的原因之一!可以轻松进行几乎任何我想要的控制。 :D

    关于wpf - 可以用 XAML 编写这样的动态字符串控件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37616869/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com