首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF覆盖DataGrid RowHeader模板并设法仍然选择行

WPF覆盖DataGrid RowHeader模板并设法仍然选择行
EN

Stack Overflow用户
提问于 2011-04-05 02:52:16
回答 2查看 6.3K关注 0票数 1

我已经覆盖了默认的行标题样式以使用我的自定义按钮:

代码语言:javascript
复制
<Style x:Key="RowHeaderStyle" TargetType="DataGridRowHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridRowHeader">
                <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{StaticResource RowHeaderButton}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

当然,问题是单击该按钮不再选择该行。我是否必须在IsPressed事件上调用自定义方法?我如何知道行索引?你会怎么做呢?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-05 10:41:31

我最终只使用了样式,如果不是很激烈,你可能可以做你想做的事情。如果任何人设法获得了在DataGridHeaderBorder上处理行选择的代码,请告诉我!示例:

代码语言:javascript
复制
<...xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"...>

<BooleanToVisibilityConverter x:Key="bool2VisibilityConverter"/>

<LinearGradientBrush  x:Key="RowHeaderBackgroundBrush" EndPoint="0.728,0.5" StartPoint="0.272,0.5">
    <GradientStop Color="#FF494949" Offset="0"/>
    <GradientStop Color="#FF3E3E3E" Offset="1"/>
    <GradientStop Color="#FF494949" Offset="0.50"/>
    <GradientStop Color="#FF3E3E3E" Offset="0.50"/>
</LinearGradientBrush>

<LinearGradientBrush x:Key="RowHeaderBackgroundBrushMouseOver" EndPoint="0.728,0.5" StartPoint="0.272,0.5">
    <GradientStop Color="#FF666666" Offset="0"/>
    <GradientStop Color="#FF525252" Offset="1"/>
    <GradientStop Color="#FF666666" Offset="0.50"/>
    <GradientStop Color="#FF525252" Offset="0.50"/>
</LinearGradientBrush>

<Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
    <Setter Property="Height" Value="8"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Cursor" Value="SizeNS"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="RowHeaderBorder" TargetType="Border">
    <Setter Property="Background" Value="{StaticResource RowHeaderBackgroundBrush}" />
    <Setter Property="BorderBrush" Value="#FF313131" />
    <Setter Property="BorderThickness" Value="0,0,1,1" />
    <Setter Property="CornerRadius" Value="0" />
    <Setter Property="Margin" Value="0" />

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{StaticResource RowHeaderBackgroundBrushMouseOver}"></Setter>
        </Trigger>
    </Style.Triggers>
</Style>

<Style x:Key="RowHeaderStyle1" TargetType="DataGridRowHeader">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridRowHeader">
                <Grid>
                    <Microsoft_Windows_Themes:DataGridHeaderBorder IsPressed="{TemplateBinding IsPressed}" Orientation="Horizontal" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}" Style="{StaticResource RowHeaderBorder}">
                        <StackPanel Orientation="Horizontal">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
                            <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
                        </StackPanel>
                    </Microsoft_Windows_Themes:DataGridHeaderBorder>
                    <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Top"/>
                    <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Bottom"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
票数 1
EN

Stack Overflow用户

发布于 2011-04-05 03:07:05

是的,你必须编写你自己选择的事件代码。

要做到这一点,一种方法是使用Blend等工具获取默认模板的副本,然后只需修改它们的模板以包含您的更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5542913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档