Как я могу "развернуть" элемент управления в WPF? - PullRequest
1 голос
/ 29 февраля 2012

В настоящее время я динамически добавляю пользовательские элементы управления метками во время выполнения в моем приложении WPF.

У меня есть WrapPanel, оборачивающая содержимое меток, если необходимо (содержимое задается динамически).

Все отлично работает, но я хочу "развернуть" ярлык.

Предполагается, что вы можете щелкнуть и перетащить этот ярлык в другое место на экране (функциональность перетаскивания здесь не проблема), который имеет гораздо большую площадь и поэтому должен занимать только одну строку.

Каков наилучший способ достижения такой функциональности?

1 Ответ

0 голосов
/ 29 февраля 2012

Самый простой способ - это использовать 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;
    }
}
}

Надеюсь, это поможет!

...