我正在使用 MVVM 设计模式创建一个 WPF 应用程序,并且我正在尝试扩展 TabItem 控件,以便它在用户单击鼠标中键时关闭选项卡。我正在尝试使用 InputBindings 来实现这一点,并且它工作得很好,直到我尝试在样式中定义它。我了解到您不能将 InputBindings 添加到样式中,除非您使用 DependencyProperty 附加它。所以我在这里关注了这个类似的帖子......它工作......几乎。我可以使用鼠标中键关闭一个选项卡,但它不适用于任何其他选项卡(所有选项卡都是在运行时添加并继承相同的样式)。
所以我需要一些帮助。为什么这只会在第一次工作,而不是之后?显然,我可以创建一个从 TabItem 继承的自定义控件并使其工作,但我想弄清楚这一点,因为我可以看到它在我的项目中被扩展。我不是 DependencyProperties 方面的专家,所以请帮帮我。谢谢!
风格:
<Style TargetType="{x:Type TabItem}">
<Setter Property="w:Attach.InputBindings">
<Setter.Value>
<InputBindingCollection>
<MouseBinding MouseAction="MiddleClick"
Command="{Binding CloseCommand}"/>
</InputBindingCollection>
</Setter.Value>
</Setter>
...
</Style>
班级
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);
}
}