Silverlight中的VisualState继承
我正在编写一个控件,它继承了一个Silverlight中的VisualState继承,silverlight,visualstatemanager,Silverlight,Visualstatemanager,我正在编写一个控件,它继承了一个单选按钮,除了显示一个图像和隐藏默认的圆圈之外,它没有做任何更引人注目的事情 有一件事我还没有弄清楚,那就是我是否必须在我的ControlTemplate中重新实现所有的VisualStates,或者我可以简单地将它们作为一个空元素,并将它们继承下来 我的XAML在下面 您没有重新实现可视状态,但它们也不会被“继承”。如果为新控件指定一个新的DefaultStyleKey,则原始样式将一无所获 如果希望新控件修改其外观以表示其当前状态,例如它是否具有焦点或它是否处
单选按钮
,除了显示一个图像和隐藏默认的圆圈之外,它没有做任何更引人注目的事情
有一件事我还没有弄清楚,那就是我是否必须在我的ControlTemplate中重新实现所有的VisualStates
,或者我可以简单地将它们作为一个空元素,并将它们继承下来
我的XAML在下面
您没有重新实现可视状态,但它们也不会被“继承”。如果为新控件指定一个新的
DefaultStyleKey
,则原始样式将一无所获
如果希望新控件修改其外观以表示其当前状态,例如它是否具有焦点或它是否处于选中状态,则需要在相应的
VisualStateGroups
集合中包含一个选项。然后在VisualState
元素中包含相应的动画,以更改按钮UI的新版本。要么全有,要么全无。如果替换模板,则必须提供所有模板,包括视觉状态。Blend可以轻松编辑默认模板的副本。是否有任何点包括
、
等空元素?
<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>