Я использую RX в своих приложениях WPF для отслеживания движения мыши.Реактивные расширения и источник MouseEventArgs
При подписке на событие перемещения мыши я получаю другой источник в MouseEventArgs по сравнению с тем, когда я использую метод образца RX.
Для удобства объяснения здесь простой пример:
У меня есть окно, содержащее сетку и кнопки:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="grid">
<Button></Button>
</Grid>
</Window>
Я подписываться на события перемещения мыши с RX:
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Observable.FromEventPattern<MouseEventArgs>(grid, "MouseMove").Subscribe(mouseMoveRx);
Observable.FromEventPattern<MouseEventArgs>(grid, "MouseMove").Sample(TimeSpan.FromSeconds(1)).Subscribe(mouseMoveRxSample);
}
private void mouseMoveRx(System.Reactive.EventPattern<MouseEventArgs> obj)
{
var element = obj.EventArgs.Source as UIElement;
//element is System.Windows.Controls.Button
}
private void mouseMoveRxSample(System.Reactive.EventPattern<MouseEventArgs> obj)
{
var element = obj.EventArgs.Source as UIElement;
//element is Microsoft.Windows.Themes.ButtonChrome
}
Первый обработчик имеет System.Windows.Controls.Button
как источник, тогда как второй обработчик имеет Microsoft.Windows.Themes.ButtonChrome
в качестве источника.
В чем причина разного источника?
Является ли это поведение соответствует? Или вы только что это видели? Это то, что вы только что нажали на кнопку на границе кнопки? Вы, в конце концов, подписываетесь на событие «MouseMove» на «Grid», поэтому все, что угодно в «Grid», которое занимает пиксель экрана, потенциально может быть источником события. –
Это последовательное поведение. Он также не изменяется, если я использую SourceSource вместо источника. – Postlagerkarte
Что делает. Пример (TimeSpan.FromSeconds (1))? –