我正在编写一个继承自RadioButton的控件,除了显示图像和隐藏默认的圆之外,它不会做任何更壮观的事情。
我还不知道的一件事是,我是否必须在我的ControlTemplate中重新实现所有的VisualStates,或者我可以简单地将它们放在一个空元素中,然后继承它们?
我的XAML在下面,the original RadioButton is on 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>发布于 2010-05-12 20:17:45
你不需要来重新实现视觉状态,但它们也不会被“继承”。如果为新控件指定新的DefaultStyleKey,则不会从原始样式中获得任何内容。
如果希望新控件修改其外观以表示其当前状态,例如它是否具有焦点或是否处于选中状态,则需要包括一组适当的VisualStateGroups。然后在VisualState元素中包含适当的动画,以更改新版本的按钮UI。
发布于 2010-05-13 01:41:15
豁出去了。如果替换模板,则必须提供所有模板,包括可视状态。使用Blend可以轻松编辑默认模板的副本。
https://stackoverflow.com/questions/2817655
复制相似问题