2

我在一个名为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}"/>但即使这样也无济于事。

提前致谢!

4

0 回答 0