使用Silverlight中的模板覆盖应用程序范围的样式

时间:2012-02-12 13:23:37

标签: silverlight templates listbox styles listboxitem

我有一个Silverlight应用程序,我已经设置了我的列表框样式。这是ListBoxItem样式的一部分,它是应用程序范围的:

<VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Normal" />
    <VisualState x:Name="MouseOver">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ListBoxItemGrid" Storyboard.TargetProperty="Background" Duration="0">
                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MouseOverColorBrush}" />
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
</VisualStateGroup>

现在我有另一个列表框,当用户将鼠标悬停在ListBoxItem上时,我不想发生任何事情。我试过这个:

<VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Normal" />
    <VisualState x:Name="MouseOver" />
</VisualStateGroup>

但这似乎不起作用。如何覆盖默认的应用程序范围样式?我不确定它是否相关,但应用程序范围的样式是样式,而我的'特殊'列表框有一个ListBoxItem的模板。

1 个答案:

答案 0 :(得分:1)

找到它。我不得不给容器一个风格:

<ListBox Grid.Row="1" 
    ItemsSource="{Binding TheItems}" 
    ItemContainerStyle="{StaticResource TheLineStyle}" 
    ItemTemplate="{StaticResource TheItemTemplate}"></ListBox>


<Style TargetType="ListBoxItem" x:Key="TheLineStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Grid>
                    <ContentControl Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal" />
                            <VisualState x:Name="MouseOver" />
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>