VisualState наследование в Silverlight - PullRequest
4 голосов
/ 12 мая 2010

Я пишу элемент управления, который наследуется от RadioButton и не делает ничего более впечатляющего, чем отображение изображения и скрытие круга по умолчанию.

Одна вещь, о которой я не смог выяснить, это то, должен ли я заново реализовать все VisualStates в моем ControlTemplate, или я могу просто поместить их как пустой элемент, и они наследуются?

Мой XAML ниже, оригинальная RadioButton на MSDN .

<Style TargetType="local:ImageRadioButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:ImageRadioButton">
                <Grid>
                    <vsm:VisualStateManager.VisualStateGroups>
                        <vsm:VisualStateGroup x:Name="CommonStates">
                            <vsm:VisualState x:Name="Normal"/>
                            <vsm:VisualState x:Name="MouseOver">
                                <Storyboard/> <!-- mouseover -->
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Pressed" />
                            <vsm:VisualState x:Name="Disabled"/>
                            <!-- TODO -->
                        </vsm:VisualStateGroup>
                        <vsm:VisualStateGroup x:Name="CheckStates">
                            <vsm:VisualState x:Name="Checked">
                                <Storyboard/>
                                <!-- checked -->
                            </vsm:VisualState>
                            <vsm:VisualState x:Name="Unchecked"/>
                        </vsm:VisualStateGroup>

                        <vsm:VisualStateGroup x:Name="FocusStates">
                            <vsm:VisualState x:Name="Focused" />
                            <vsm:VisualState x:Name="Unfocused" />
                        </vsm:VisualStateGroup>
                        <vsm:VisualStateGroup x:Name="ValidationStates">
                            <vsm:VisualState x:Name="Valid"/>
                            <vsm:VisualState x:Name="InvalidUnfocused" />
                            <vsm:VisualState x:Name="InvalidFocused" />
                        </vsm:VisualStateGroup>
                    </vsm:VisualStateManager.VisualStateGroups>

                    <ContentPresenter/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

Это все или ничего. Если вы заменяете шаблон, вы должны предоставить все его, включая визуальные состояния. Blend позволяет легко редактировать копию шаблона по умолчанию.

2 голосов
/ 12 мая 2010

У вас нет для переопределения визуальных состояний, но они также не будут "унаследованы". Если вы укажете новый DefaultStyleKey для нового элемента управления, вы ничего не получите от оригинального стиля.

Если вы хотите, чтобы ваш новый элемент управления изменил свой внешний вид, чтобы он представлял свое текущее состояние, например, имеет ли он фокус или выбран, вам нужно будет включить соответствующий набор VisualStateGroups. Затем включите в элементы VisualState соответствующую анимацию, чтобы изменить новую версию пользовательского интерфейса кнопки.

...