帮助创建 ListBoxItem 的样式

发布于 2024-07-14 18:32:14 字数 2996 浏览 7 评论 0原文

我是样式新手,需要帮助为 ListBoxItem 创建样式,该样式将为该项目提供透明背景,然后将鼠标悬停在其上方时使字体变成金色。 单击时不应改变颜色,鼠标移开时应恢复正常。 它仍然必须将选定的对象传递给 ListBox 的 PreviewMouseRightButtonDown 事件。

我当前使用 REUXABLES THEMES 中的默认字典,但对于应用程序上显示的这部分来说,这是一种过多的着色方式。

谢谢,

    <DataTemplate x:Key="ItemsTemplate">
        <StackPanel Orientation="Vertical"
              Margin="0,5,0,5"
              Width="{Binding 
              Path=ActualWidth,
              RelativeSource={RelativeSource 
              Mode=FindAncestor, 
              AncestorType={x:Type ScrollContentPresenter}}}" MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}" >
            <TextBlock VerticalAlignment="Top" TextWrapping="Wrap" FontSize="14" Text="{Binding Path=CID}" />
                 <StackPanel Orientation="Horizontal" Margin="0,5,0,0" >
                    <TextBlock>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" >Posted by</Label>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" VerticalContentAlignment="Top" Content="{Binding Path=ACID}" />
                    </TextBlock>
                    <TextBlock>
                         <Label Foreground="{DynamicResource DisabledForegroundBrush}" Margin="3,0,0,0">at</Label>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" Margin="3,0,3,0" VerticalContentAlignment="Top" Content="{Binding Path=Type}" />
                    </TextBlock>
                    <TextBlock>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}">(</Label>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" VerticalContentAlignment="Top" Content="{Binding Path=Route}" />
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}">)</Label>
                    </TextBlock>
                </StackPanel>

            </StackPanel>
    </DataTemplate>

    <Style x:Key="ItemsListBox" TargetType="{x:Type ListBoxItem}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="Background" Value="{DynamicResource Transparent}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource Transparent}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource Transparent}"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    </Style>

<ListBox x:Name="ListViewFlightPlans" Grid.Column="0" ItemTemplate="{DynamicResource ItemsTemplate}" 
                         MaxWidth="800" ScrollViewer.HorizontalScrollBarVisibility="Disabled" BorderBrush="Black" BorderThickness="2,0,0,1">

            </ListBox>

戴夫

I am new to styles and need help to create a style for a ListBoxItem that will give the item a transparent background then have the Font turn Gold when hovered over. It should not change the color when clicked and return to normal when the mouse moves off. It must still pass the selected object to the PreviewMouseRightButtonDown event for the ListBox

I currently use a default dictionary from REUXABLES THEMES, but it is way to much coloring for this portion of the display on the application.

Thanks,

    <DataTemplate x:Key="ItemsTemplate">
        <StackPanel Orientation="Vertical"
              Margin="0,5,0,5"
              Width="{Binding 
              Path=ActualWidth,
              RelativeSource={RelativeSource 
              Mode=FindAncestor, 
              AncestorType={x:Type ScrollContentPresenter}}}" MaxWidth="{Binding RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}" >
            <TextBlock VerticalAlignment="Top" TextWrapping="Wrap" FontSize="14" Text="{Binding Path=CID}" />
                 <StackPanel Orientation="Horizontal" Margin="0,5,0,0" >
                    <TextBlock>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" >Posted by</Label>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" VerticalContentAlignment="Top" Content="{Binding Path=ACID}" />
                    </TextBlock>
                    <TextBlock>
                         <Label Foreground="{DynamicResource DisabledForegroundBrush}" Margin="3,0,0,0">at</Label>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" Margin="3,0,3,0" VerticalContentAlignment="Top" Content="{Binding Path=Type}" />
                    </TextBlock>
                    <TextBlock>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}">(</Label>
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}" VerticalContentAlignment="Top" Content="{Binding Path=Route}" />
                        <Label Foreground="{DynamicResource DisabledForegroundBrush}">)</Label>
                    </TextBlock>
                </StackPanel>

            </StackPanel>
    </DataTemplate>

    <Style x:Key="ItemsListBox" TargetType="{x:Type ListBoxItem}">
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="Background" Value="{DynamicResource Transparent}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource Transparent}"/>
        <Setter Property="BorderBrush" Value="{DynamicResource Transparent}"/>
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    </Style>

<ListBox x:Name="ListViewFlightPlans" Grid.Column="0" ItemTemplate="{DynamicResource ItemsTemplate}" 
                         MaxWidth="800" ScrollViewer.HorizontalScrollBarVisibility="Disabled" BorderBrush="Black" BorderThickness="2,0,0,1">

            </ListBox>

Dave

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

打小就很酷 2024-07-21 18:32:14

不幸的是,更改 ListBoxItemBorderBrush 不会达到您想要的效果,因为带有选择突出显示的 BorderControlTemplate 内部的ListBoxItem

相反,您可以使用键 SystemColors.HighlightBrushKey,这是 ListBoxItem 用于设置选择突出显示颜色的键。

非活动选择画笔使用 SystemColors.ControlBrushKey< 的键/a>,因此,如果您使用透明的 Brush 覆盖这两个内容,则保证不会有任何选择颜色。 您可以在 本文

这是一个包含除 DataTemplate 之外的所有内容的示例:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid.Resources>
        <x:Array x:Key="data" Type="{x:Type sys:String}">
            <sys:String>a </sys:String>
            <sys:String>bb</sys:String>
            <sys:String>ccc</sys:String>
            <sys:String>dddd</sys:String>
        </x:Array>
    </Grid.Resources>
    <ListBox ItemsSource="{StaticResource data}">
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                </Style.Resources>
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Black"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Gold"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.Resources>
    </ListBox>
</Grid>

Unfortunately changing BorderBrush for the ListBoxItem won't have your desired effect, since the Border with the selection highlight is internal to the ControlTemplate of the ListBoxItem.

Instead, you can add a new Brush resource with the key of SystemColors.HighlightBrushKey, this is the key that the ListBoxItem uses for setting the selection highlight color.

The inactive selection brush uses the key of SystemColors.ControlBrushKey, so if you override both of these with a transparent Brush you're guaranteed not to have any selection color. You can read more about it in this article.

Here's an example with everything but your DataTemplate:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid.Resources>
        <x:Array x:Key="data" Type="{x:Type sys:String}">
            <sys:String>a </sys:String>
            <sys:String>bb</sys:String>
            <sys:String>ccc</sys:String>
            <sys:String>dddd</sys:String>
        </x:Array>
    </Grid.Resources>
    <ListBox ItemsSource="{StaticResource data}">
        <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                </Style.Resources>
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Foreground" Value="Black"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="Gold"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.Resources>
    </ListBox>
</Grid>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文