如何在WPF中“解包”控件?

时间:2012-02-29 00:42:36

标签: wpf wpf-controls

我目前正在WPF应用中动态添加自定义标签控件。

如果需要,我有一个WrapPanel包装标签的内容(内容是动态设置的)。

一切正常,但我想“打开”标签。

前提是您可以在屏幕上的其他位置单击并拖动此标签(拖放功能不是此处的问题),这是一个更大的区域,因此应该只占用一行。

实现此类功能的最佳方式是什么?

1 个答案:

答案 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;
    }
}
}

希望这有帮助!