4

から継承しRadioButton、画像を表示してデフォルトの円を非表示にする以上のことをしないコントロールを作成しています。

私が知ることができなかった 1 つのことは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

視覚的な状態を再実装する必要はありません、「継承」されません。新しいコントロールにnew を指定するとDefaultStyleKey、元のスタイルから何も得られません。

新しいコントロールの外観を変更して、フォーカスがあるかどうか、選択されているかどうかなどの現在の状態を表す場合は、適切な のセットを含める必要がありますVisualStateGroups。次に、VisualState要素に適切なアニメーションを含めて、ボタンの UI の新しいバージョンを変更します。

于 2010-05-12T12:17:44.837 に答える