Событие MouseLeftButtonDown не работает Wpf - PullRequest
0 голосов
/ 26 сентября 2018

Добрый день, ребята, моя проблема в этом.Я пытаюсь заставить событие срабатывать после нажатия на TextBox внутри DataTemplate. Может кто-нибудь сказать мне, почему оно не сработало?

Следуйте приведенному ниже коду XAML.

    <StackPanel Orientation="Horizontal">
        <ItemsControl Grid.Row="0" ItemsSource="{Binding Pagamentos}" HorizontalAlignment="Left" x:Name="cbxFormaDePagamento" Margin="0,0,0,8">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBox x:Name="txtFormaPagamento" Text="{Binding FormaPagamento.Nome}" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" Width="216" Height="45" Background="White" BorderThickness="1" BorderBrush="#b7b7b7" IsEnabled="False" FontFamily="Roboto" FontSize="18" Foreground="Black" Padding="0,0,0,0" Margin="0,0,0,8" MouseLeftButtonDown="txtFormaPagamento_MouseLeftButtonDown"></TextBox>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>

Функция MouseLeftButtonDown

private void txtFormaPagamento_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var viewModel = DataContext as FormasPagamentoViewModel;

        foreach (var currencyTextBox in FindVisualChildren<CurrencyTextBox>(this))
        {
            if (currencyTextBox.Name == "cbxValor")
            {
                currencyTextBox.Number = viewModel.TotalPagar;
            }
        }
    }

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Причина в том, что дочерние элементы в шаблоне ControlTemplate добавляются в элемент управления элементами.Вы увидите, что сначала к нему добавляется TextBox, а затем добавляется ContentPresenter, что означает, что ContentPresenter находится над TextBox.Если вы разрешите ContentPresenter участвовать в тестировании попаданий, то при нажатии на TextBox ContentPresenter съест событие мыши, и поэтому TextBox не сможет его увидеть.

Так что отключите свойство IsHitTestVisible объектаКонтент-предъявитель элементов управления.Это можно сделать, применив собственный стиль к элементу управления элементами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...