WPF / XAML事件处理程序与视图模型的样式绑定

时间:2016-09-05 06:51:46

标签: c# wpf xaml events styles

我用样式创建了我的日历:

<Style x:Key="CalendarDayButtonStyle" TargetType="CalendarDayButton">
        <Setter Property="Background" Value="{StaticResource Brush.Foreground.TextBlock.LightBlue}" />
        <Setter Property="MinWidth" Value="5" />
        <Setter Property="MinHeight" Value="5" />
        <Setter Property="FontSize" Value="12" />
        <Setter Property="HorizontalContentAlignment" Value="Center" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="Template"> 
        ...

        <EventSetter Event="MouseDoubleClick" Handler="{Binding DayButtonCommand}"/>
    </Style>

我想通过MouseDoubleClick事件执行命令。

但是在应用程序启动时发生异常: “PresentationFramework.dll中发生了'System.Windows.Markup.XamlParseException'类型的未处理异常

附加信息:BaseUri只能在根节点设置一次(XamlXmlReader可能在根节点提供默认值)。“

我在资源文件中创建此样式并使用MVVM。

如何将MouseDoubleClick事件与此StyleDayButton样式绑定?

感谢。

1 个答案:

答案 0 :(得分:0)

您不应该使用样式,而是在触发Double Click事件时使用附加行为触发命令。 MVVM light has such a feature

XAML看起来像这样:

<CalendarDayButton ...>

   <i:Interaction.Triggers>
      <i:EventTrigger EventName="Tap">
        <command:EventToCommand
            Command="{Binding Main.NavigateToArticleCommand,
            Mode=OneWay,
            Source={StaticResource Locator}}"
            CommandParameter="{Binding Mode=OneWay}" />
      </i:EventTrigger>
   </i:Interaction.Triggers>
 </CalendarDayButton>

编辑:您还可以在View中的Calendar对象上使用Routed EventHandler,并从视图的代码隐藏中调用ViewModel命令。 Example