我在一个名为 ControlResources的资源项目的ResourceDictionary中设置了一个滚动条(使用TargetType作为滚动条而不是x:Key来指定样式)。
风格:
DefaultScrollBarStyle.xaml (ResourceDictionary):
<Style x:Key="ScrollBarLineButton" TargetType="{x:Type RepeatButton}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Focusable" Value="false"/>
<Setter Property="Background" Value="{StaticResource BackgroundNormal}"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrushNormal}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1">
<Path HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{StaticResource Foreground}"
Data="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource BackgroundHighlighted}"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrushHighlighted}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="{StaticResource BackgroundSelected}" />
<Setter Property="BorderBrush" Value="{StaticResource BorderBrushSelected}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ScrollBarPageButton" TargetType="{x:Type RepeatButton}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<Border Background="{TemplateBinding Background}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource ScrollBarPageButtonBackgroundHighlighted}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ScrollBarThumb" TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Focusable" Value="false"/>
<Setter Property="Background" Value="{StaticResource BackgroundNormal}"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrushNormal}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" />
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource BackgroundHighlighted}"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrushHighlighted}"/>
</Trigger>
<Trigger Property="IsDragging" Value="True">
<Setter Property="Background" Value="{StaticResource BackgroundSelected}"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrushSelected}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="VerticalScrollBar" TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="18"/>
<RowDefinition/>
<RowDefinition Height="18"/>
</Grid.RowDefinitions>
<RepeatButton Grid.Row="0" Style="{StaticResource ScrollBarLineButton}" Content="M 0 4 L 8 4 L 4 0 Z" Command="ScrollBar.LineUpCommand"/>
<Track Name="PART_Track"
Grid.Row="1"
IsDirectionReversed="true">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageUpCommand" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource ScrollBarThumb}"/>
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageDownCommand" />
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Row="2" Style="{StaticResource ScrollBarLineButton}" Command="ScrollBar.LineDownCommand" Content="M 0 0 L 4 4 L 8 0 Z"/>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="HorizontalScrollBar" TargetType="{x:Type ScrollBar}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="18"/>
<ColumnDefinition/>
<ColumnDefinition Width="18"/>
</Grid.ColumnDefinitions>
<RepeatButton Grid.Column="0" Style="{StaticResource ScrollBarLineButton}" Content="M 0 4 L 4 8 L 4 0 Z" Command="ScrollBar.LineLeftCommand"/>
<Track Name="PART_Track"
Grid.Column="1"
IsDirectionReversed="false">
<Track.DecreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageLeftCommand" />
</Track.DecreaseRepeatButton>
<Track.Thumb>
<Thumb Style="{StaticResource ScrollBarThumb}"/>
</Track.Thumb>
<Track.IncreaseRepeatButton>
<RepeatButton Style="{StaticResource ScrollBarPageButton}" Command="ScrollBar.PageRightCommand" />
</Track.IncreaseRepeatButton>
</Track>
<RepeatButton Grid.Column="2" Style="{StaticResource ScrollBarLineButton}" Content="M 4 4 L 0 8 L 0 0 Z" Command="ScrollBar.LineRightCommand"/>
</Grid>
</ControlTemplate>
<Style TargetType="{x:Type ScrollBar}" >
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Style.Triggers>
<Trigger Property="Orientation" Value="Vertical">
<Setter Property="Width" Value="18"/>
<Setter Property="Height" Value="Auto" />
<Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
</Trigger>
<Trigger Property="Orientation" Value="Horizontal">
<Setter Property="Height" Value="18"/>
<Setter Property="Width" Value="Auto" />
<Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" />
</Trigger>
</Style.Triggers>
</Style>
它位于 ControlResources 中的库清单看起来像....
ResourceLibrary.xaml (another ResourceDictionary):
<ResourceDictionary.MergedDictionaries>
<!--BaseControlStyles-->
<ResourceDictionary Source="BaseControlStyles/DefaultTabControlStyle.xaml"/>
<ResourceDictionary Source="BaseControlStyles/DefaultExpanderStyle.xaml"/>
<ResourceDictionary Source="BaseControlStyles/DefaultScrollBarStyle.xaml"/>
<!--Brushes-->
<ResourceDictionary Source="Brushes/DefaultColorTheme.xaml"/>
.
.
.
通过Appl.xaml ...
路由到MyProject(主项目)<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ControlResources;component/ResourceDictionaries/ResourceLibrary.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Window}">
<Setter Property="FontFamily" Value="Segoe UI" />
</Style>
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</Application.Resources>
那么我怎么能在设计师中看到它而不是在我的项目运行时呢?没有错误,我已多次重建我的解决方案。 (注意:此问题的常见错误修复包含在<Style TargetType="{x:Type Rectangle}"/>
中,但即使这样也无济于事。
提前致谢!