1
我目前在運行時在我的WPF應用程序中動態添加自定義標籤控件。如何「解開」WPF中的控件?
我有一個WrapPanel包裝標籤的內容,如果需要(內容是動態設置的)。
一切工作正常,但我想「解開」標籤。
前提是您可以在屏幕上的其他位置單擊並拖動此標籤(拖放功能不是此處的問題),這是一個更大的區域,因此應該只佔用一行。
什麼是實現這種功能的最佳方式?
我目前在運行時在我的WPF應用程序中動態添加自定義標籤控件。如何「解開」WPF中的控件?
我有一個WrapPanel包裝標籤的內容,如果需要(內容是動態設置的)。
一切工作正常,但我想「解開」標籤。
前提是您可以在屏幕上的其他位置單擊並拖動此標籤(拖放功能不是此處的問題),這是一個更大的區域,因此應該只佔用一行。
什麼是實現這種功能的最佳方式?
最簡單這樣做的方法是使用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;
}
}
}
希望這有助於!
感謝您的回答!我怎麼能一次只做一個標籤? – Lucas 2012-02-29 08:36:43
您是否在應用程序中使用MVVM模式? – 2012-02-29 08:44:44
是的,在Caliburn.Micro的幫助下使用MVVM。 – Lucas 2012-02-29 09:19:53