MouseBinding в TexBox в ItemsControl не работает WPF C # - PullRequest
0 голосов
/ 04 июля 2018

У меня есть MainWindow, в котором есть ItemsControl для моего EngineersUserControl (Engineers_UC) вместе с другими элементами управления. Мой Engineers_UC состоит из нескольких TextBox, для которых я хочу добавить MouseBinding, чтобы иметь возможность щелкнуть левой кнопкой мыши на TextBox и выполнить другой метод в моей ViewModel. Я читал, что проблема может заключаться в том, что элементы ItemsControl не могут быть сфокусированы, но я не нашел решения. Есть идеи?

MainWindow:

 <Grid>
    <StackPanel>
        <UserControl:Ribbon_UC Loaded="Ribbon_UC_Loaded" Margin="0,0,0,70"/>
        <UserControl:Calendar_UC/>
        <ItemsControl ItemsSource="{Binding Engineer}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <UserControl:Engineers_UC />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</Grid> 

Engineers_UC:

 <TextBox Name="EngineerName" IsReadOnly="True" Style="{StaticResource StyleTrigger} Text ="{Binding FULLNAME}">
           <TextBox.InputBindings>
                    <MouseBinding Command="{Binding EngineerCommand}" CommandParameter="{Binding ElementName=EngineerName}" MouseAction="{Binding EngineerCommand.MouseGesture}"/>
                </TextBox.InputBindings>
 </TextBox>

EngineerCommand:

void RelayCommands()
    {
        EngineerCommand = new SimpleDelegateCommand(x => EngineerFunction(x))
        {
            MouseGesture = MouseAction.LeftClick
        };
    }

  void EngineerFunction (object _engineername)
    {
        EngineerNameClicked = (_engineername as TextBox).Text;

    }
public class SimpleDelegateCommand : ICommand
{
    public Key GestureKey { get; set; }
    public ModifierKeys GestureModifier { get; set; }
    public MouseAction MouseGesture { get; set; }

    Action<object> _executeDelegate;

    public SimpleDelegateCommand(Action<object> executeDelegate)
    {
        _executeDelegate = executeDelegate;
    }

    public void Execute(object parameter)
    {
        _executeDelegate(parameter);
    }

    public bool CanExecute(object parameter) { return true; }
    public event EventHandler CanExecuteChanged;
}

1 Ответ

0 голосов
/ 04 июля 2018

Если команда EngineerCommand определена в том же классе модели представления, что и коллекция, к которой вы привязываете свойство ItemsSource ItemsControl к (Engineer), вы должны использовать RelativeSource для связывание (я) в ItemTemplate:

<MouseBinding Command="{Binding DataContext.EngineerCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}" ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...