Невозможно перетаскивать выпадающие элементы между связанными элементами управления - PullRequest
1 голос
/ 10 марта 2012

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

проблема в том, что элементы управления не распознаются какотбрасывать цели с помощью каркаса перетаскивания

Панель ItemsControl:

    <ItemsPanelTemplate x:Key="TopPipePanelTemplate">
            <StackPanel></StackPanel>
    </ItemsPanelTemplate>

Шаблон данных:

    <DataTemplate x:Key="PipeDataItem" >
        <Ellipse Width="45" Height="45" Fill="{Binding IsMine,Converter={StaticResource MyCheckerOwnerToColorConverter}}"></Ellipse>
    </DataTemplate>

Стиль ItemsControl:

    <Style TargetType="{x:Type ItemsControl}" x:Key="ItemsControlStyle">
          <Setter Property="ItemTemplate" Value="{StaticResource PipeDataItem}"></Setter>
          <Setter Property="AllowDrop" Value="True"></Setter>                                      
          <EventSetter Event="Drop" Handler="ItemsControlDropTarget"></EventSetter> 
          <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ItemsControl_MouseLeftButtonDown"></EventSetter>      
    </Style>

** для этого примера давайте возьмем 2 элемента управления ItemsControl: **

    <ItemsControl ItemsSource="{Binding Path=Pipes[23].Checkers}" Style="{StaticResource ItemsControlStyle}"/>
    <ItemsControl Grid.Column="1" ItemsSource="{Binding Path=Pipes[22].Checkers}" Style="{StaticResource ItemsControlStyle}"/>

при регулярном отображении:

enter image description here

пустой (левый) не распознается как цель отбрасывания, хотя AllowDrop установлен в True и обрабатывает событие Drop (как и все элементы управления на этом экране, посмотрите на стиль ItemsControlвыше)

теперь, когда я окрашиваю панель управления элементами, она внезапно распознается:

    <ItemsPanelTemplate x:Key="TopPipePanelTemplate">
            <StackPanel Background="AliceBlue"></StackPanel>
    </ItemsPanelTemplate>

enter image description here

, как будто теперь она занимает всю ячейку, которую оназанимает .. я пытался установить панель для VerticalAlignment = "Stretch", но это также никак не повлияло

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

какие-либо идеи?

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

на данный момент iv'e просто установите фон прозрачным

1 Ответ

3 голосов
/ 10 марта 2012

Цвет фона панели по умолчанию не существует, что означает, что тесты попадания проходят через него. Чтобы заставить его регистрировать тесты попаданий, такие как события мыши, вам нужно придать ему цвет фона. Обычно я просто использую White, хотя вы сказали, что Transparent также работает и будет лучшим выбором.

Кроме того, StackPanels обычно занимает только необходимое им пространство. Возможно, вам лучше использовать панель, которая растягивается, чтобы заполнить все доступное пространство, например, DockPanel с LastChildFill="False" и установить DockPanel.Dock="Top" для ваших предметов

...