数据网格列标题中的Click元素

时间:2018-07-22 21:23:11

标签: c# wpf xaml wpfdatagrid

我已经对DataGrid的列标题应用了自定义样式。这是它的简化版本:

<Style x:Key="DataGridColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridColumnHeader">
                <Grid>
                    <Border BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}">
                        <Grid>
                            <StackPanel Orientation="Horizontal">
                                <ContentPresenter Margin="5 0 5 0" HorizontalAlignment="Center" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                <Image IsHitTestVisible="True" Source="pin.png">
                                    <Image.InputBindings>
                                        <MouseBinding MouseAction="LeftClick" Command="{x:Static myView:MyCommand}" CommandParameter="{Binding}" />
                                    </Image.InputBindings>
                                </Image>
                            </StackPanel>
                        </Grid>
                    </Border>
                    <Thumb x:Name="PART_LeftHeaderGripper" Style="{StaticResource DataGridColumnHeaderResizeThumb}"/>
                    <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource DataGridColumnHeaderResizeThumb}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我正在努力使单击图像时触发该命令。我有什么想念的吗?单击DataGridColumnHeader中的元素(即图像)时,是否可以通过其他方式触发命令?

更多详细信息: MyCommand在窗口的CommandBindings中定义。我没有在此处包含此代码。我还为可以正常工作的其他元素(即DataGridCell)定义了其他命令。看来,DataGridColumnHeader元素阻止触发命令的方式有些特定。

1 个答案:

答案 0 :(得分:0)

似乎您要绑定到xmlns MyCommand下的类型myView;相反,您应该绑定到MyCommand的实例(假设类MyCommand实现ICommand)。您可以考虑在此处实现单例。或者,您可以在任何地方定义MyCommand的静态实例。