为datarow添加eventsetter而不是触发

时间:2017-05-18 06:02:50

标签: c# wpf xaml datagrid

app.xaml内部我有数据网格样式 对于包含数据网格的每个窗口,我为datagridrow添加了一个事件设置器。 然而,当我运行它时,我可以看到样式,但是当我尝试触发事件时没有任何反应。如果我从app.xaml中删除该样式。活动运作良好。 为什么app.xaml样式禁用我的eventsetter? 这是app.xaml中的datagrid:

<Style TargetType="DataGrid">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="GridLinesVisibility" Value="None"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="RowStyle">
            <Setter.Value>
                <Style TargetType="DataGridRow">
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="HorizontalAlignment" Value="Center"/>
                    <Setter Property="Foreground" Value="White"/>                        
                </Style>
            </Setter.Value>
        </Setter>
        <Setter Property="ColumnHeaderStyle">
            <Setter.Value>
                <Style TargetType="DataGridColumnHeader">
                    <Setter Property="Margin" Value="5,0,0,0"/>
                    <Setter Property="Foreground" Value="White"/>
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{ x:Type DataGridColumnHeader}">
                                    <Border BorderThickness="2,2,2,0" CornerRadius="5,5,0,0">
                                    <Border.Style>
                                        <Style TargetType="Border">
                                            <Setter Property="BorderBrush" Value="White"/>
                                            <Style.Triggers>
                                                <DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}" Value="{x:Null}">
                                                    <Setter Property="BorderBrush" Value="Transparent"/>
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </Border.Style>
                                    <ContentPresenter HorizontalAlignment="Center" Margin="5"></ContentPresenter>
                                    </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </Setter.Value>
        </Setter>
    </Style>

这里是包含datagrid的每个窗口中的事件设置器:

<Style TargetType="DataGridRow">
        <EventSetter Event="MouseDoubleClick" Handler="EditItem"/>
    </Style>

1 个答案:

答案 0 :(得分:0)

似乎网格稍后使用其属性中的RowStyle,而不是在窗口的资源中设置。如果您在网格中清除RowStyle属性,它将工作。把它放到窗口的资源中:

"python3"

因为您可以使用app.xaml中设置的样式,您必须将RowStyle从属性移动到全局(在app.xaml中):

<Style TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
    <Setter Property="RowStyle" Value="{x:Null}"/>
</Style>

并在窗口的资源中:

    <Style TargetType="DataGrid">
....
                <Setter Property="RowStyle" Value="{x:Null}"/>
...
            </Style>

<Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
    <Setter Property="Background" Value="Green"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="Foreground" Value="White"/>
</Style>