我目前正在WPF应用中动态添加自定义标签控件。
如果需要,我有一个WrapPanel包装标签的内容(内容是动态设置的)。
一切正常,但我想“打开”标签。
前提是您可以在屏幕上的其他位置单击并拖动此标签(拖放功能不是此处的问题),这是一个更大的区域,因此应该只占用一行。
实现此类功能的最佳方式是什么?
答案 0 :(得分:0)
最简单的方法是使用ItemsControl作为动态列表并动态更改其ItemsPanelTemplate。这是我刚刚制作的完整工作代码......
MainWindow.xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow"
Height="350"
Width="200">
<Window.Resources>
<ItemsPanelTemplate x:Key="wrapPanelTemplate">
<WrapPanel />
</ItemsPanelTemplate>
<ItemsPanelTemplate x:Key="stackPanelTemplate">
<StackPanel />
</ItemsPanelTemplate>
</Window.Resources>
<StackPanel>
<ItemsControl x:Name="itemsControl"
ItemsPanel="{StaticResource wrapPanelTemplate}">
<ListBoxItem Content="TESTTEST " />
<ListBoxItem Content="TESTTEST " />
<ListBoxItem Content="TESTTEST " />
<ListBoxItem Content="TESTTEST " />
</ItemsControl>
<Button Click="Button_Click" Content="Change Template Button"/>
</StackPanel>
MainWindow.xaml.cs:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
ItemsPanelTemplate stackPanelTemp;
public MainWindow()
{
InitializeComponent();
stackPanelTemp = (ItemsPanelTemplate)(this.FindResource("stackPanelTemplate"));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
itemsControl.ItemsPanel = stackPanelTemp;
}
}
}
希望这有帮助!