Переопределить стиль в приложении с помощью шаблона в Silverlight - PullRequest
1 голос
/ 12 февраля 2012

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

1 голос
/ 18 февраля 2012

Нашел это.Я должен был придать контейнеру стиль:

<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>
...