0

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

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

То есть при нажатии нужно чтобы элемент добавляться а кнопка сдвигалась если нет элементов будет видна только кнопка.

Мой код XAML:

<StackPanel >
                    <TextBlock Text="Filter Files"  HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Foreground="White" FontSize="20"
                               />
                    <ItemsControl ItemsSource="{Binding Filters,UpdateSourceTrigger=PropertyChanged}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    &lt;ItemsControl.ItemTemplate&gt;
                        &lt;DataTemplate&gt;

                            &lt;Border CornerRadius=&quot;3&quot;  BorderBrush=&quot;White&quot; BorderThickness=&quot;2&quot; Margin=&quot;2&quot;&gt;
                                &lt;Grid Margin=&quot;5&quot;&gt;
                                    &lt;TextBlock Width=&quot;50&quot; Height=&quot;20&quot; Foreground=&quot;White&quot;
                                           Text=&quot;{Binding Name}&quot;/&gt;
                                    &lt;Border
                                    Width=&quot;{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}&quot;
                                    HorizontalAlignment=&quot;Right&quot;
                                    VerticalAlignment=&quot;Top&quot;
                                    Background=&quot;#FFFF2020&quot;
                                    CornerRadius=&quot;3&quot;&gt;
                                        &lt;Border.InputBindings&gt;
                                            &lt;MouseBinding
                                      Command=&quot;{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=DataContext.RemoveFilterCommand}&quot;
                                      CommandParameter=&quot;{Binding}&quot;
                                      Gesture=&quot;LeftClick&quot; /&gt;
                                        &lt;/Border.InputBindings&gt;

                                        &lt;TextBlock
                                         Margin=&quot;1&quot;
                                         HorizontalAlignment=&quot;Center&quot;
                                         VerticalAlignment=&quot;Center&quot;
                                         Foreground=&quot;White&quot;
                                         Text=&quot;&quot; /&gt;
                                        &lt;!--Style=&quot;{StaticResource BaseText}&quot;--&gt;
                                    &lt;/Border&gt;

                                &lt;/Grid&gt;
                            &lt;/Border&gt;
                        &lt;/DataTemplate&gt;
                    &lt;/ItemsControl.ItemTemplate&gt;
                &lt;/ItemsControl&gt;

                &lt;Button Width=&quot;50&quot; Height=&quot;20&quot; Content=&quot;Add Item&quot; Command=&quot;{Binding}&quot;/&gt;
            &lt;/StackPanel&gt; 

Подскажите такое возможно реализовать ?

Vladimir
  • 403
  • 1
    Костыль, но как вариант: Сделайте интерфейс, в нем сделайте свойство, например Text, которое будет отвечать за текст кнопки, также свойство ICommand для самой команды закрытия. Имея интерфейс, сделайте 2 класса: 1. Для самих этих расширений. 2. Для типа кнопки. После, сделайте коллекцию этих интерфейсов, добавляя туда нужные элементы, а последним кнопку. В XAML, через DataContext задайте вид для двух классов, где классу кнопки делаете вид, естественно, последней кнопки, а классу расширений текущий вид объектов. Таким образом, кнопка у вас будет как часть коллекции. – EvgeniyZ Jul 23 '22 at 22:48
  • @EvgeniyZ у вас случайно нету примера похожего? – Vladimir Jul 24 '22 at 02:21
  • 1
    Ну вот допустим, только у вас будет не круг и квадрат, а текущий ваш вид расширений и вид кнопки добавления. – EvgeniyZ Jul 24 '22 at 09:51
  • @EvgeniyZ Спасибо вам огромное,ценю вашу помощь. Вопрос если объекты будут реализовать разные интерфейсы как быть ? – Vladimir Jul 29 '22 at 13:10
  • 1
    А в чем трудности с разными интерфейсами? Интерфейс - это контракт, который должен соблюдать конкретный объект. Если ваш объект должен соблюдать несколько контрактов, один из которых именно кнопка в UI, то пишите несколько интерфейсов, логика UI и добавления кнопок не изменится. – EvgeniyZ Jul 29 '22 at 13:30
  • @EvgeniyZ как в коллекцию List<IShape> добавлю объекты с разной реализацией интерфейсов – Vladimir Jul 29 '22 at 14:11
  • 1
    list.Add(new Circle());, list.Add(new Square());. Коллекция list - это List<IShape> (коллекция интерфейсов), а Circle и Square это реализующие интерфейс классы (public class Square : IShape { ... }). – EvgeniyZ Jul 29 '22 at 17:11
  • @EvgeniyZ это понял что вы написали,если Square : IShape а Circle:IFigure как мне быть? – Vladimir Jul 29 '22 at 18:21
  • 1
    Яж уже сказал выше, вы можете навешать сколько угодно интерфейсов, сделайте один конкретный, который будет отвечать за конкретную задачу, ну и делайте далее Square : IShape, Circle : IShape, IFigure. – EvgeniyZ Jul 29 '22 at 18:25
  • @EvgeniyZ я вас понял спасибо огромное – Vladimir Jul 29 '22 at 18:27

0 Answers0