У меня есть View с ListBox
:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox ItemsSource="{Binding LB1}" Height="270">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Content}"
Background="BlanchedAlmond">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction
Command="{Binding DataContext.MLBD,
RelativeSource={RelativeSource
AncestorType={x:Type ListBox},
Mode=FindAncestor}}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction
Command="{Binding DataContext.MLBU,
RelativeSource={RelativeSource
AncestorType={x:Type ListBox},
Mode=FindAncestor}}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Label>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox Grid.Column="1" ItemsSource="{Binding LB2}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Path=Content}"
Background="BlanchedAlmond">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction
Command="{Binding DataContext.MLBD,
RelativeSource={RelativeSource
AncestorType={x:Type ListBox},
Mode=FindAncestor}}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction
Command="{Binding DataContext.MLBU,
RelativeSource={RelativeSource
AncestorType={x:Type ListBox},
Mode=FindAncestor}}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Label>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
И ViewModel с реализацией событий MouseLeftButtonDown/Up для обмена Content
между ListBoxItem
public List<Label> LB1 { get; set; }
public List<Label> LB2 { get; set; }
public Label Swap { get; set; }
public MainWindowViewModel()
{
LB1 = new List<Label>()
{
new Label() { Content="10"},
new Label() { Content="20"},
new Label() { Content="30"}
};
LB2 = new List<Label>()
{
new Label() { Content="01"},
new Label() { Content="02"},
new Label() { Content="03"}
};
Swap = new Label();
}
public Command<Label> MLBD => new Command<Label>((label) =>
{
Swap = label;
});
public Command<Label> MLBU => new Command<Label>((label) =>
{
string text = label.Content.ToString();
label.Content = Swap.Content;
Swap.Content = text;
});
В пределах о одного ListBox
всё работает нормально, но когда MouseLeftButtonDown
делаю в одном ListBox
а MouseLeftButtonUp
в другом то событие MouseLeftButtonUp
не срабатывает. А если MouseLeftButtonUp
сделать в месте где нет контролов а потом на другой ListBox
то обмен происходит, хотя так быть не должно.
Подскажите как исправить ситуацию. Всё делал в Catel с использованием Fody.
Оказалось проблема в том что ListBox
автоматически делает захват мыши, для решения добавляем следующий обработчик MouseLeave
для Label
:
<i:EventTrigger EventName="MouseLeave">
<i:InvokeCommandAction
Command="{Binding DataContext.CaptureOff,
RelativeSource={RelativeSource
Mode=FindAncestor, AncestorType=ListBox}}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
и сама логика:
public Command CaptureOff => new Command(() =>
{
Mouse.Capture(null);
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
решил создать простенький тест на php, может кто подсказать какой ajax код надо написать чтобы при нажатии на кнопку страничка не перезагружаласьВот...
Подскажите пожалуйста литературу или подкасты, чтобы помимо умения выполнять абсолютно любые задачи на данных cms, ещё и уметь создавать шаблоны,...
Пересмотрел кучу видео, статей, делал всё как там, запрос не отправляется, никакой реакции от скриптаjQuery подключён, работает
Есть скрипт который может работать очень долго, более 1 часа, но из за fastcgi_read_timeout он тупо отрубается, и не может до конца выполнить работуКак...