我有一个在资源中有一个 ResourceDictionary 的窗口。我制作了一个 CheckBox 样式,它基于 ResourceDictionary 中定义的样式。更重要的是,我想制作一个基于 ToggleButton 样式的 RadioButton,它不是基于 ResourceDictionary 中定义的样式。我使用了 ControlTemplate,如下面的代码所示,但在这种情况下,TemplateBinding 对于所有涉及的属性都是必需的。有没有更好的方法来实现我的目的而不使用 ControlTemplate?
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/theme;component/BasicTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.Resources>
<Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
<!-- Several style setters -->
</Style>
<Style x:Key="Edit"/>
<ControlTemplate x:Key="ToggleTemplate" TargetType="{x:Type ToggleButton}">
<ToggleButton Style="{StaticResource Edit}"
Content="{TemplateBinding Content}"
IsChecked="{TemplateBinding IsChecked}"/>
</ControlTemplate>
</Grid.Resources>
<CheckBox/>
<RadioButton Template="{DynamicResource ToggleTemplate}"/>
</Grid>
以下代码无法正常工作。
<Grid>
<Grid.Resources>
<Style x:Key="Edit"/>
<Style TargetType="{x:Type RadioButton}" BasedOn="{StaticResource Edit}" x:Key="ToggleStyle"/>
</Grid.Resources>
<RadioButton Style="{StaticResource ToggleStyle}"/>
</Grid>