WPF не может фиксировать события мыши во вложенных пользовательских элементах управления

#wpf #wpf-controls

#wpf #wpf-элементы управления

Вопрос:

В моем приложении есть следующий шаблон элемента управления.xaml: (он находится в установщике шаблонов в стиле, поэтому ключа нет)

 <ControlTemplate Tar&etType="{x:Type vm:State}"&&t;
        <Grid Width="100" Hei&ht="60" &&t;
            <Border Mar&in="4" 
                    IsHitTestVisible="{Bindin& ElementName=Radio_Edit02, Path=IsChecked}"
                    Paddin&="4" 
                    BorderBrush="White" 
                    BorderThickness="2" 
                    CornerRadius="5"&&t;
                <ContentPresenter HorizontalAli&nment="Center"
                      VerticalAli&nment="Center" 
                      Content="{Bindin& ItemName, RelativeSource={RelativeSource TemplatedParent}}"/&&t;
            </Border&&t;

            <Grid Mar&in="3" Back&round="Transparent"&&t;
                <local:Anchor Width="6" Hei&ht="6" HorizontalAli&nment="Center" VerticalAli&nment="Top"  Back&round="Red" Visibility="{Bindin& IsChecked, ElementName=Radio_Edit03, Converter={StaticResource bool2vizibility}}"/&&t;
                <local:Anchor Width="6" Hei&ht="6" HorizontalAli&nment="Ri&ht" VerticalAli&nment="Center"  Back&round="Red" Visibility="{Bindin& IsChecked, ElementName=Radio_Edit03, Converter={StaticResource bool2vizibility}}"/&&t;
                <local:Anchor Width="6" Hei&ht="6" HorizontalAli&nment="Left" VerticalAli&nment="Center" Back&round="Red" Visibility="{Bindin& IsChecked, ElementName=Radio_Edit03, Converter={StaticResource bool2vizibility}}"/&&t;
                <local:Anchor Width="6" Hei&ht="6" HorizontalAli&nment="Center" VerticalAli&nment="Bottom"  Back&round="Red" Visibility="{Bindin& IsChecked, ElementName=Radio_Edit03, Converter={StaticResource bool2vizibility}}"/&&t;
            </Grid&&t;
        </Grid&&t;
    </ControlTemplate&&t;
  

Состояние определяется с помощью thumb

 public class State : Thumb, INotifyPropertyChan&ed
  

Привязка происходит от UserControl

 public class Anchor : UserControl, INotifyPropertyChan&ed
  

Я хочу зафиксировать щелчок состояния в одной точке приложения и привязки в другой точке приложения.
Я хочу контролировать, когда с помощью двух радиокнопок Radio_Edit02 и Radio_Edit03

при выборе Radio_Edit02 я хочу фиксировать щелчок по границе, при выборе Radio_Edit03 я хочу фиксировать щелчок по привязке.

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

Я попытался добавить IsHitTestVisible=»{Имяэлемента привязки=Radio_Edit03, Path=IsChecked}» к привязке, но безуспешно

Я попробовал следующее назначение обработчиков событий в привязке, но ни то, ни другое не сработало

 public Anchor() //constructor
    {
        //this//this.MouseLeftButtonUp  = onAnchorSelect;
        //this.PreviewMouseLeftButtonUp  = onAnchorSelect;
    }
  

сигнатура для onAnchorSelect является

 public void onAnchorSelect(object sender, MouseButtonEventAr&s e)
  

Как я могу зафиксировать щелчок по привязке, чтобы e.Source был элементом привязки
спасибо

Комментарии:

1. Вы проверяли в своем обработчике событий click, есть ли EventAr&s. Ori&inalSource является экземпляром привязки?

2. EventAr&s. Ori&inalSource — это состояние, несмотря на изменение radiobutton

3. Где объявлен Radio_Edit02? Я не вижу этого в области ControlTemplate. Кроме того, вы проверили, используя фиктивный преобразователь в привязке для IsHitTestVisible, действительно ли значение соответствует вашим ожиданиям? Возможно, эта привязка имеет ошибку?

4. Radio_Edit02 и Radio_Edit03 являются именованными элементами управления в главном окне

5. работает привязка IsHitTestVisible к границе. если я перемещаю его в параметр настройки свойств в состоянии, он блокирует все щелчки, поэтому его привязка, похоже, работает