2012-02-29 47 views
1

我目前在運行時在我的WPF應用程序中動態添加自定義標籤控件。如何「解開」WPF中的控件?

我有一個WrapPanel包裝標籤的內容,如果需要(內容是動態設置的)。

一切工作正常,但我想「解開」標籤。

前提是您可以在屏幕上的其他位置單擊並拖動此標籤(拖放功能不是此處的問題),這是一個更大的區域,因此應該只佔用一行。

什麼是實現這種功能的最佳方式?

回答

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

希望這有助於!

+0

感謝您的回答!我怎麼能一次只做一個標籤? – Lucas 2012-02-29 08:36:43

+0

您是否在應用程序中使用MVVM模式? – 2012-02-29 08:44:44

+0

是的,在Caliburn.Micro的幫助下使用MVVM。 – Lucas 2012-02-29 09:19:53