Переопределить стиль приложения с помощью шаблона в Silverlight

У меня есть приложение 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>

Но, похоже, это не работает. Как я могу переопределить стиль по умолчанию для всего приложения? Я не уверен, что это актуально, но стиль для всего приложения - это Style, а в моем «специальном» списке есть Template для его ListBoxItem.


person Peter    schedule 12.02.2012    source источник


Ответы (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>
person Peter    schedule 18.02.2012