이상한 버그를 발견했습니다. canvas MouseLeftButtonDown 이벤트에 명령을 바인딩하면 실행되지 않습니다. 나는 디버깅을 시도하고 그것이 발생했다는 것을 알아 차렸지만 초기화 중에 만 나타났습니다. 요점은 구속력이있는 것 같아요.-wpf 캔버스 이벤트 처음으로 만 실행됩니다.
<ItemsControl Grid.Row="1" ItemsSource="{Binding Polygons}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas>
<i:Interaction.Behaviors>
<behaviours:MouseBehaviour MouseX="{Binding MouseX, Mode=OneWayToSource}" MouseY="{Binding MouseY, Mode=OneWayToSource}" />
</i:Interaction.Behaviors>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<command:EventToCommand Command="{Binding SelectPointCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
/* some data template
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
그리고 명령 구현 :
public ICommand SelectPointCommand
{
get
{
if (!CanEdit)
return new RelayCommand(e => { });
ClickCounter++;
if (ClickCounter == 3)
{
ClickCounter = 0;
CanEdit = false;
}
return new RelayCommand(
() =>
{
Polygons.Add(new Polygon(ClickedPoints));
ClickedPoints.Clear();
});
}
}
내가 MouseBehaviour에뿐만 아니라 didnt 한 도움이 코드 조각을 삭제 여기에 문제를 추측 여기에 코드입니다.
ps : 캔버스 배경 속성을 설정하려고 시도했지만 작동하지 않았습니다. 뿐만 아니라이 같은 메서드를 호출하려고 이
SelectPointCommand = new RelayCommand(
() =>
{
System.Windows.MessageBox.Show("Test");
},
() => true);
편집에 명령을 설정 :
<Canvas Background="Transparent" MouseLeftButtonDown="UIElement_OnMouseLeftButtonDown">
</Canvas>
그리고 뒤에있는 코드 :
private void UIElement_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
((MainViewModel)DataContext).SelectPointCommand.Execute(e);
}
방법 UIElement_OnMouseLeftButtonDown의 ISN을 ' 어쨌든 호출됩니다. Canvas를 StackPanel로 변경하면 동일한 결과가 나타납니다.
픽스 업을 시도했지만 불행히도 한 번만 실행됩니다. –