Пунктирная граница на ListBoxItem в WPF

public class Class1<GenericType> where GenericType : struct
{
}

Этот, казалось, сделал задание..

6
задан Claus Jørgensen 15 December 2014 в 04:51
поделиться

1 ответ

Попробуйте следующее:

<Window.Resources>
        <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" />
        <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />
        <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" />
        <!-- SimpleStyles: ListBoxItem -->
        <Style TargetType="ListBoxItem" x:Key="ListBoxItemTemplate">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Grid>
                            <Rectangle x:Name="Rectangle" Fill="Transparent" Stroke="Black" 
                                       StrokeDashCap="Square" StrokeThickness="0" SnapsToDevicePixels="True">
                                <Rectangle.StrokeDashArray>
                                    <sys:Double>5</sys:Double>
                                </Rectangle.StrokeDashArray>
                            </Rectangle>
                            <Border 
                                Name="Border"
                                Padding="2"
                                BorderThickness="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderThickness}"
                                BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=BorderBrush}">
                                <ContentPresenter />
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter TargetName="Rectangle" Property="StrokeThickness" Value="1" />
                                <Setter TargetName="Border" Property="BorderThickness" Value="0" />
                            </Trigger>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter TargetName="Rectangle" Property="Fill" Value="{StaticResource SelectedBackgroundBrush}" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource ListBoxItemTemplate}">
            <Setter Property="Height" Value="30" />
            <Setter Property="BorderThickness" Value="0,0,0,1" />
            <Setter Property="BorderBrush" Value="Silver" />
            <Style.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex" Value="3">
                    <Setter Property="BorderBrush" Value="Black"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>
    <StackPanel>
        <ListBox>
            <ListBoxItem Content="Item 1" />
            <ListBoxItem Content="Item 2" />
            <ListBoxItem Content="Item 3" />
            <ListBoxItem Content="Item 4" />
        </ListBox>
    </StackPanel>

Итак, я поместил прямоугольник под фактической границей в шаблоне элемента управления. Граница прямоугольника может быть пунктирной, пунктирной или ж / д (чтобы сделать черту меньше, просто измените часть на 2, 1 не будет заметно). Таким образом, значение по умолчанию для толщины границы прямоугольника равно 0, но при выборе я устанавливаю толщину на 1, чтобы она была видна. Я также сделал некоторые свойства границы, которые будут привязаны к его шаблонному родительскому элементу, чтобы он мог выглядеть так, как вы установили в своем стиле (серебряная кисть, толщина 0,0,0,1).

5
ответ дан 17 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: