4

我正在编写一个从 a 继承的控件,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>
4

2 回答 2

3

要么全有,要么全无。如果您替换模板,则必须提供所有模板,包括视觉状态。Blend 使编辑默认模板的副本变得容易。

于 2010-05-12T17:41:14.547 回答
2

您不必重新实现视觉状态,但它们也不会被“继承”。如果您为新控件指定一个新DefaultStyleKey控件,您将无法从原始样式中获得任何信息。

如果您希望您的新控件修改其外观以表示其当前状态,例如它是否具有焦点或是否已选中,您将需要包含一组适当的VisualStateGroups. 然后在VisualState元素中包含适当的动画来更改按钮 UI 的新版本。

于 2010-05-12T12:17:44.837 回答