改变Mahapps Tile上的鼠标悬停效果

时间:2017-04-07 09:29:21

标签: wpf xaml data-binding listbox mahapps.metro

所以最近我开始使用MahApps.Metro作为应用程序。 它一直很好,但我无法解决的一个问题是对瓷砖的MouseOver效果

我有一个Grid,其中有一个Expander,它托管所有Tiles,每个Tiles代表与特定数据库的连接。它们绑定到 ObservableCollection ,我从另一个数据库填充。

<Grid>
    <Expander Margin="5" Header="Server Connections">
        <ListBox ItemsSource="{Binding OmsConnections}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel IsItemsHost="True" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <controls:Tile
                        Title="{Binding Name}"
                        controls:ControlsHelper.MouseOverBorderBrush="{DynamicResource BlackBrush}"
                        Background="{DynamicResource GrayBrush2}"
                        Command="{Binding DataContext.TileClickCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
                        CommandParameter="{Binding}"
                        HorizontalTitleAlignment="Left"
                        Style="{StaticResource LargeTileStyle}"
                        TiltFactor="2">
                        <Image
                            Width="60"
                            Height="60"
                            Source="{Binding OmsConnectionTypeId, Converter={StaticResource ConnectionTypeToIconConverter}}" />
                    </controls:Tile>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Expander>
</Grid>

这是通过Style

应用的样式
    <Style x:Key="LargeTileStyle" TargetType="controls:Tile">
        <Setter Property="Height" Value="125" />
        <Setter Property="TitleFontSize" Value="14" />
        <Setter Property="TextOptions.TextFormattingMode" Value="Display" />
        <Setter Property="TextOptions.TextRenderingMode" Value="ClearType" />
        <Setter Property="Width" Value="210" />
    </Style>

所以每当我鼠标悬停一个项目时,我会得到指定的黑色边框,而这个橙色背景颜色(如果我没有弄错的话,是AccentColorBrush3),我不知道如何更改它。

Here's the Image, since my rep is low and i cannot embed it.

另外,我对模板和样式非常非常糟糕,所以这几乎是我从互联网上删除的内容。对于我绑定到集合的方式以及如何更改MouseOver颜色,我们非常感谢任何反馈。

1 个答案:

答案 0 :(得分:1)

您可以通过向AccentColorBrush3添加SolidColorBrush资源来“覆盖”ListBox资源:

<ListBox ItemsSource="{Binding OmsConnections}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <!-- Specify the highlight brush here: -->
    <ListBox.Resources>
        <SolidColorBrush x:Key="AccentColorBrush3" Color="Yellow" />
    </ListBox.Resources>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <controls:Tile
                        Title="{Binding Name}"
                        controls:ControlsHelper.MouseOverBorderBrush="{DynamicResource BlackBrush}"
                        Background="{DynamicResource GrayBrush2}"
                        Command="{Binding DataContext.TileClickCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
                        CommandParameter="{Binding}"
                        HorizontalTitleAlignment="Left"
                        Style="{StaticResource LargeTileStyle}"
                        TiltFactor="2">
                <Image  Width="60"
                        Height="60"
                        Source="{Binding OmsConnectionTypeId, Converter={StaticResource ConnectionTypeToIconConverter}}" />
            </controls:Tile>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>