2012-02-29 2 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

+0

Вы используете шаблон MVVM или нет в своем приложении? –

+0

Да, используя MVVM с помощью Caliburn.Micro. – Lucas

Смежные вопросы