Определение InputBindings в стиле

Я создаю приложение WPF с помощью шаблона разработки MVVM, и я пытаюсь расширить управление TabItem так, чтобы это закрыло вкладку, когда пользователь щелкает средней кнопкой мыши. Я пытаюсь достигнуть этого использования InputBindings, и это работает очень хорошо, пока я не пытаюсь определить его в стиле. Я узнал, что Вы не можете добавить InputBindings к стилю, если Вы не присоединяете его с помощью DependencyProperty. Таким образом, я следовал этому подобному сообщению здесь..., и оно работает... почти. Я могу закрыть одну вкладку с помощью средней кнопки мыши, но она не будет работать ни над одной из других вкладок (все вкладки добавляются во времени выполнения и наследовали тот же стиль).

Таким образом, я нуждаюсь в некоторой помощи. Почему это только работало бы в первый раз, и не после? Очевидно, я мог создать пользовательский элемент управления, который наследовался TabItem, и заставьте его работать, но я хотел бы понять это, поскольку я вижу, что это расширено в моих проектах. Я не эксперт по DependencyProperties, поэтому выручите меня.Спасибо!

Стиль:


Класс

public class Attach
{
    public static readonly DependencyProperty InputBindingsProperty =
        DependencyProperty.RegisterAttached("InputBindings", typeof(InputBindingCollection), typeof(Attach),
        new FrameworkPropertyMetadata(new InputBindingCollection(),
        (sender, e) =>
        {
            var element = sender as UIElement;
            if (element == null) return;
            element.InputBindings.Clear();
            element.InputBindings.AddRange((InputBindingCollection)e.NewValue);
        }));

    public static InputBindingCollection GetInputBindings(UIElement element)
    {
        return (InputBindingCollection)element.GetValue(InputBindingsProperty);
    }

    public static void SetInputBindings(UIElement element, InputBindingCollection inputBindings)
    {
        element.SetValue(InputBindingsProperty, inputBindings);
    }
}

20
задан Community 23 May 2017 в 10:30
поделиться

1 ответ

Ничего страшного, я сам догадался. В итоге я даже не использовал класс Attach выше ... вместо этого я использовал InputBindings в ControlTemplate для TabItem (который является границей), поэтому это выглядело примерно так ... Я не знаю, почему я не подумал этого в первую очередь .. :)

<ControlTemplate TargetType="{x:Type TabItem}">
    <Grid SnapsToDevicePixels="true">
        <Border x:Name="Bd" ...>
            <DockPanel>
                ...
            </DockPanel>
            <Border.InputBindings>
                <MouseBinding MouseAction="MiddleClick"
                              Command="{Binding CloseCommand}"/>
            </Border.InputBindings>
        </Border>
    </Grid>
    ...
</ControlTemplate>
14
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: