Office 2010 нравится стиль элементов списка? - PullRequest
0 голосов
/ 11 августа 2011

OneNote 2010 - Backstage Menu - New tab
Это представление списка в Office 2010 со стилизованными элементами ... и наведенными, и нажатыми / выбранными.
Как использовать стиль элементов в элементах представления списка WPF?
Я использую Fluent Ribbon Control Suite для своего пользовательского интерфейса, и для этого есть подходящие цвета.
У меня просто нет никакой подсказки, как применить их к ListViewItem s.
Пожалуйста, как мне сделать стиль?

Редактировать : Я знаю, как стилизовать элементы ... Просто я не знаю, как применять этот стиль, поскольку он немного сложнее.Например, есть 2 границы .
Я попытался поместить стили в каждую рамку в шаблоне, но не могу определить (с помощью отдельных стилей), выбран ли элемент.
Я также пыталсяпомещая TargetName s в стиль предметов, но ошибка говорит, что я не могу.

Ответы [ 3 ]

0 голосов
/ 11 августа 2011

Может быть, вы не хотите заново изобретать колесо?http://www.devcomponents.com/blog/?p=581

Я использую эти компоненты, и они прекрасны.

Суть в том, что это не тривиальная задача.

Проверьте, как настоящая кнопкасделал: http://msdn.microsoft.com/en-us/library/ms753328.aspx и вы получите то, что я имею в виду.

0 голосов
/ 11 августа 2011

Итак, я установил свойство Template в Setter в Style, и я попытался связать не-1004 * свойства внутри него, и это сработало!

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="ListViewItem">
            <Border Background="{DynamicResource TransparentBrush}" BorderBrush="{DynamicResource TransparentBrush}" BorderThickness="1" CornerRadius="2" Height="Auto" HorizontalAlignment="Stretch" Name="border" VerticalAlignment="Stretch">
                <Border Background="{DynamicResource TransparentBrush}" BorderBrush="{DynamicResource TransparentBrush}" BorderThickness="1" CornerRadius="2" Height="Auto" Name="border1">
                    <TextBlock Text="{Binding Path=FileName}" TextAlignment="Center" TextTrimming="CharacterEllipsis" Width="Auto" />
                </Border>
            </Border>

            <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Border.BorderBrush" TargetName="border" Value="{DynamicResource ButtonPressedOuterBorderBrush}" />
                    <Setter Property="Border.Background" TargetName="border" Value="{DynamicResource ButtonPressedOuterBackgroundBrush}" />
                    <Setter Property="Border.Background" TargetName="border1" Value="{DynamicResource ButtonPressedInnerBackgroundBrush}" />
                    <Setter Property="Border.BorderBrush" TargetName="border1" Value="{DynamicResource ButtonPressedInnerBorderBrush}" />
                </Trigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="UIElement.IsMouseOver" Value="True" />
                        <Condition Property="IsSelected" Value="False" />
                        <Condition Property="UIElement.IsEnabled" Value="True" />
                    </MultiTrigger.Conditions>
                    <Setter Property="Border.BorderBrush" TargetName="border1" Value="{DynamicResource ButtonHoverInnerBorderBrush}" />
                    <Setter Property="Border.Background" TargetName="border1" Value="{DynamicResource ButtonHoverInnerBackgroundBrush}" />
                    <Setter Property="Border.Background" TargetName="border" Value="{DynamicResource ButtonHoverOuterBackgroundBrush}" />
                    <Setter Property="Border.BorderBrush" TargetName="border" Value="{DynamicResource ButtonHoverOuterBorderBrush}" />
                </MultiTrigger>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="UIElement.IsKeyboardFocusWithin" Value="True" />
                        <Condition Property="IsSelected" Value="False" />
                    </MultiTrigger.Conditions>
                    <Setter Property="Border.BorderBrush" TargetName="border1" Value="{DynamicResource ButtonHoverInnerBorderBrush}" />
                    <Setter Property="Border.Background" TargetName="border1" Value="{DynamicResource ButtonHoverInnerBackgroundBrush}" />
                    <Setter Property="Border.Background" TargetName="border" Value="{DynamicResource ButtonHoverOuterBackgroundBrush}" />
                    <Setter Property="Border.BorderBrush" TargetName="border" Value="{DynamicResource ButtonHoverOuterBorderBrush}" />
                </MultiTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>

Здесьсвойство FileName (очевидно) не является частью ListViewItem, это часть моего класса, которую я поместил в ListView.Это в строке 6.

Для тех, кто хочет тему, она есть, в ControlTemplate.Triggers!
Вам нужно Свободно для ресурсов (кистей), которые я использовал.Я взял их из стиля Fluent.Button.

Просто замените TextBlock на свой шаблон данных, и все будет в порядке!:)

0 голосов
/ 11 августа 2011

Используйте ItemsControl.ItemContainerStyle, чтобы определить стиль для ваших предметов, чтобы изменить внешний вид для тех состояний, которые вы можете использовать Triggers, которые срабатывают при IsSelected и IsMouseOver, как вы достигнете этого конкретного результата в конце, зависит от вас ...

...