如何设置自定义控件的鼠标悬停样式-悬停-MyToolkit.Controls.DataGrid

拉尔夫

我正在使用此工具包进行WinRT,并正在开发一个Windows 8.1商业应用程序,该应用程序具有一个数据网格以显示应用程序的参数。

我的应用程序具有黑色背景,当我将鼠标悬停在网格(在PC而非平板电脑上)的项目上时,文本变为黑色。这样,用户将无法读取悬停内容。

我能够更改网格背景,试图在任何地方找到Hover属性,但没有成功。这是我更改背景的方式:

<controls:DataGrid Height="Auto"
                       ItemsSource="{Binding Params, Mode=TwoWay}"
                       x:Name="gridParams"
                       Grid.Row="1"
                       View:EventHandlers.Attach="SelectionChanged => SelectionChangedHandler($sender)"

                       DefaultOrderIndex="0">
        <controls:DataGrid.Resources>
            <Style TargetType="controls:DataGrid">
                <Setter Property="Background" Value="Black"/>
            </Style>


        </controls:DataGrid.Resources>....

有人在使用此工具包吗?

任何帮助都感激不尽!

谢谢。

内特·戴蒙德

如果你看一下DataGrid的风格,有一件事你会发现是,DataGrid的主模板只是含有NavigationList(这些工具包自己的控件之一),带有自定义StyleTransparentListBox,这是BasedOnListBox风格。

NavigationList实际的是ExtendedListBox,自定义控件的另一个。

这两个都继承ItemContainerStyle自的ListBox,因为它们没有覆盖它。

这意味着每个项目实际上都继承了默认值ListBoxItem Style

您会注意到的一件事Style是,它具有一堆define VisualStates,包括:

<VisualState x:Name="PointerOver">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                       Storyboard.TargetProperty="Background">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemPointerOverBackgroundThemeBrush}" />
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                       Storyboard.TargetProperty="Foreground">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemPointerOverForegroundThemeBrush}" />
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

现在,有两种方法可以解决此问题。最简单(但最具侵入性)的方法是App.Xaml像这样覆盖您的值

<Application
    ...>
    <Application.Resources>
        <SolidColorBrush x:Key="ListBoxItemPointerOverBackgroundThemeBrush" Color="#21000000" />
        <SolidColorBrush x:Key="ListBoxItemPointerOverForegroundThemeBrush" Color="Green" />
    </Application.Resources>
</Application>

虽然这将改变所有 ListBoxES的画笔,所以可能不尽如人意。

下一个解决方案是仅覆盖当前控件的ListBoxItem模板。这稍微困难一点,并且需要更多代码,但是它会变成这样:

<controls:DataGrid
    ...>
    <controls:DataGrid.Template>
        <ControlTemplate TargetType="controls:DataGrid">
            <Grid Background="{TemplateBinding Background}">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid Grid.Row="0" Background="{StaticResource ListBoxItemDisabledForegroundThemeBrush}" Height="50" x:Name="titles" />
                <controls:NavigationList BorderThickness="0" Grid.Row="1"
                             HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
                             Style="{StaticResource TransparentListBox}" Margin="0" x:Name="list" >
                    <controls:NavigationList.ItemContainerStyle>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="Background" Value="Transparent" />
                            <Setter Property="TabNavigation" Value="Local" />
                            <Setter Property="Padding" Value="8,10" />
                            <Setter Property="HorizontalContentAlignment" Value="Left" />
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="ListBoxItem">
                                        <Border x:Name="LayoutRoot"
                                                Background="{TemplateBinding Background}"
                                                BorderBrush="{TemplateBinding BorderBrush}"
                                                BorderThickness="{TemplateBinding BorderThickness}">
                                            <VisualStateManager.VisualStateGroups>
                                                <VisualStateGroup x:Name="CommonStates">
                                                    <VisualState x:Name="Normal" />
                                                    <VisualState x:Name="PointerOver">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemPointerOverBackgroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemPointerOverForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="Disabled">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemDisabledForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="Pressed">
                                                        <Storyboard>
                                                            <DoubleAnimation Storyboard.TargetName="PressedBackground"
                                                                             Storyboard.TargetProperty="Opacity"
                                                                             To="1"
                                                                             Duration="0" />
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemPressedForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                </VisualStateGroup>
                                                <VisualStateGroup x:Name="SelectionStates">
                                                    <VisualState x:Name="Unselected" />
                                                    <VisualState x:Name="Selected">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="InnerGrid"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedBackgroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="SelectedUnfocused">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="InnerGrid"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedBackgroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="SelectedDisabled">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="InnerGrid"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedDisabledBackgroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedDisabledForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="SelectedPointerOver">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="InnerGrid"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedPointerOverBackgroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="SelectedPressed">
                                                        <Storyboard>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="InnerGrid"
                                                                                           Storyboard.TargetProperty="Background">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedBackgroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
                                                                                           Storyboard.TargetProperty="Foreground">
                                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxItemSelectedForegroundThemeBrush}" />
                                                            </ObjectAnimationUsingKeyFrames>
                                                        </Storyboard>
                                                    </VisualState>
                                                </VisualStateGroup>
                                                <VisualStateGroup x:Name="FocusStates">
                                                    <VisualState x:Name="Focused">
                                                        <Storyboard>
                                                            <DoubleAnimation Storyboard.TargetName="FocusVisualWhite"
                                                                             Storyboard.TargetProperty="Opacity"
                                                                             To="1"
                                                                             Duration="0" />
                                                            <DoubleAnimation Storyboard.TargetName="FocusVisualBlack"
                                                                             Storyboard.TargetProperty="Opacity"
                                                                             To="1"
                                                                             Duration="0" />
                                                        </Storyboard>
                                                    </VisualState>
                                                    <VisualState x:Name="Unfocused" />
                                                    <VisualState x:Name="PointerFocused" />
                                                </VisualStateGroup>
                                            </VisualStateManager.VisualStateGroups>
                                            <Grid x:Name="InnerGrid"
                                                  Background="Transparent">
                                                <Rectangle x:Name="PressedBackground"
                                                           Fill="{ThemeResource ListBoxItemPressedBackgroundThemeBrush}"
                                                           Opacity="0" />
                                                <ContentPresenter x:Name="ContentPresenter"
                                                                  Content="{TemplateBinding Content}"
                                                                  ContentTransitions="{TemplateBinding ContentTransitions}"
                                                                  ContentTemplate="{TemplateBinding ContentTemplate}"
                                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                                  Margin="{TemplateBinding Padding}" />
                                                <Rectangle x:Name="FocusVisualWhite"
                                                           Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
                                                           StrokeEndLineCap="Square"
                                                           StrokeDashArray="1,1"
                                                           Opacity="0"
                                                           StrokeDashOffset=".5" />
                                                <Rectangle x:Name="FocusVisualBlack"
                                                           Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
                                                           StrokeEndLineCap="Square"
                                                           StrokeDashArray="1,1"
                                                           Opacity="0"
                                                           StrokeDashOffset="1.5" />
                                            </Grid>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </controls:NavigationList.ItemContainerStyle>
                </controls:NavigationList>
            </Grid>
        </ControlTemplate>
    </controls:DataGrid.Template>
</controls:DataGrid>


    </controls:DataGrid.Template>
</controls:DataGrid>

只需更换两个引用ListBoxItemPointerOverBackgroundThemeBrushListBoxItemPointerOverForegroundThemeBrush你想要的任何新的价值。

尽管这似乎有些麻烦,但您现在可以将每个项目的颜色更改为悬停时想要的任何颜色。如果有很多这样的东西,您还可以存储自定义项DataGrid Style并重用它。

希望这对您有所帮助,并祝您编程愉快!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C# WPF DataGrid 行鼠标悬停事件

来自分类Dev

剑道网格自定义按钮的鼠标悬停或鼠标输入或悬停事件?

来自分类Dev

如何自定义工具条按钮鼠标悬停时突出显示颜色

来自分类Dev

如何在自定义NSView中使按钮在鼠标悬停时更改颜色?

来自分类Dev

如何在链接旁边的鼠标悬停时更改自定义图标图像?

来自分类Dev

无法在 UWP 中处理 MyToolKit.Extended DataGrid

来自分类Dev

WinRTXamlToolkit.Controls TreeView-删除鼠标悬停突出显示

来自分类Dev

WinRTXamlToolkit.Controls TreeView-删除鼠标悬停突出显示

来自分类Dev

当鼠标悬停在悬停元素上时,如何设置悬停效果继续显示?

来自分类Dev

当鼠标悬停在悬停元素上时,如何设置悬停效果继续显示?

来自分类Dev

如何更改 WPF 中的 DataGrid 单元格悬停颜色?

来自分类Dev

将鼠标悬停在WPF中的按钮上时如何显示自定义文本框

来自分类Dev

除系列数据外,如何在高图上的柱形图鼠标悬停时显示自定义数据?

来自分类Dev

mytoolkit:FixedHtmlBlock更改样式,xaml

来自分类Dev

mytoolkit:FixedHtmlBlock更改样式,xaml

来自分类Dev

鼠标悬停上的笔形图自定义标签失败

来自分类Dev

每次将鼠标悬停在上方时都会绘制自定义标签的图表

来自分类Dev

每次将鼠标悬停在上方时都会绘制自定义标签的图表

来自分类Dev

通过 VSTO 加载项自定义 Outlook 约会鼠标悬停屏幕提示

来自分类Dev

JQgrid:禁用表头鼠标悬停样式

来自分类Dev

如何为多个鼠标悬停事件创建单个样式?

来自分类Dev

JS鼠标悬停

来自分类Dev

jQuery鼠标悬停

来自分类Dev

鼠标悬停事件

来自分类Dev

鼠标悬停

来自分类Dev

如何使用CSS在鼠标悬停时设置特定元素的样式?

来自分类Dev

悬停/鼠标悬停功能冲突

来自分类Dev

悬停/鼠标悬停功能冲突

来自分类Dev

表和鼠标悬停效果(悬停)

Related 相关文章

  1. 1

    C# WPF DataGrid 行鼠标悬停事件

  2. 2

    剑道网格自定义按钮的鼠标悬停或鼠标输入或悬停事件?

  3. 3

    如何自定义工具条按钮鼠标悬停时突出显示颜色

  4. 4

    如何在自定义NSView中使按钮在鼠标悬停时更改颜色?

  5. 5

    如何在链接旁边的鼠标悬停时更改自定义图标图像?

  6. 6

    无法在 UWP 中处理 MyToolKit.Extended DataGrid

  7. 7

    WinRTXamlToolkit.Controls TreeView-删除鼠标悬停突出显示

  8. 8

    WinRTXamlToolkit.Controls TreeView-删除鼠标悬停突出显示

  9. 9

    当鼠标悬停在悬停元素上时,如何设置悬停效果继续显示?

  10. 10

    当鼠标悬停在悬停元素上时,如何设置悬停效果继续显示?

  11. 11

    如何更改 WPF 中的 DataGrid 单元格悬停颜色?

  12. 12

    将鼠标悬停在WPF中的按钮上时如何显示自定义文本框

  13. 13

    除系列数据外,如何在高图上的柱形图鼠标悬停时显示自定义数据?

  14. 14

    mytoolkit:FixedHtmlBlock更改样式,xaml

  15. 15

    mytoolkit:FixedHtmlBlock更改样式,xaml

  16. 16

    鼠标悬停上的笔形图自定义标签失败

  17. 17

    每次将鼠标悬停在上方时都会绘制自定义标签的图表

  18. 18

    每次将鼠标悬停在上方时都会绘制自定义标签的图表

  19. 19

    通过 VSTO 加载项自定义 Outlook 约会鼠标悬停屏幕提示

  20. 20

    JQgrid:禁用表头鼠标悬停样式

  21. 21

    如何为多个鼠标悬停事件创建单个样式?

  22. 22

    JS鼠标悬停

  23. 23

    jQuery鼠标悬停

  24. 24

    鼠标悬停事件

  25. 25

    鼠标悬停

  26. 26

    如何使用CSS在鼠标悬停时设置特定元素的样式?

  27. 27

    悬停/鼠标悬停功能冲突

  28. 28

    悬停/鼠标悬停功能冲突

  29. 29

    表和鼠标悬停效果(悬停)

热门标签

归档