WPF Expander Toggle Button - 在setter中添加它们吗?

时间:2011-08-16 20:07:37

标签: wpf expander setter togglebutton basedon

您可以在ExpanderStyle中的Setter中指定ToggleButtonStyle吗? 像这样可以在日历中使用:

<Style x:Key="CS" TargetType="{x:Type Calendar}" >
    <Setter Property="CalendarDayButtonStyle" Value="{StaticResource CalendarDayButtonStyle}"/>
    <Setter Property="CalendarButtonStyle" Value="{StaticResource CalendarButtonStyle}"/>
    <Setter Property="CalendarItemStyle" Value="{StaticResource CalendarItemStyle}"/>
</Style>

问题的背景:在BasedOn-Styles中,我只更改了setter而不是整个模板以进行小的更改。

非常感谢。

2 个答案:

答案 0 :(得分:0)

不,这是不可能的。 Expander控件不公开该属性。但是,您可以设置扩展器模板并以任何方式显示该按钮。

Here is the complete XAML code for the default template

您应该将该模板复制到项目中并修改ToggleButton以使用您想要的任何样式:

<ToggleButton OverridesDefaultStyle="True"
    Template="{StaticResource ExpanderToggleButton}"
    IsChecked="{Binding IsExpanded, Mode=TwoWay, 
    RelativeSource={RelativeSource TemplatedParent}}"
    Style="{StaticResource YourStyleHere}">

答案 1 :(得分:0)

这不可能是开箱即用的。可能因为没有一个ToggleButton样式,有四个,每个ExpandDirection

  • 向下 - ExpanderDownHeaderStyle
  • 向上 - ExpanderUpHeaderStyle
  • 左 - ExpanderLeftHeaderStyle
  • 右 - ExpanderRightHeaderStyle

对你来说可能有些过分,但如果你真的需要这个功能可以重复使用,你可以创建自己的自定义控件,在其中添加四个依赖属性,ToggleButtonDownStyleToggleButtonUpStyleToggleButtonLeftStyle和{ {1}}并将ToggleButtonRightStyle的默认样式复制到自定义控件的默认样式中,但将Expander样式的StaticResource更改为ToggleButton

所以这并不容易,但这会让你做你想做的事情(而且我猜你最感兴趣的是默认的TemplateBinding方向)

Down

以下是控件的外观,我将其命名为<Style TargetType="{x:Type controls:StyleableExpander}"> <Setter Property="ToggleButtonDownStyle" Value="{StaticResource toggleButtonDownStyle}"/> <Setter Property="ToggleButtonUpStyle" Value="{StaticResource toggleButtonUpStyle}"/> <Setter Property="ToggleButtonLeftStyle" Value="{StaticResource toggleButtonLeftStyle}"/> <Setter Property="ToggleButtonRightStyle" Value="{StaticResource toggleButtonRightStyle}"/> </Style> 并将其放入“WPF自定义控件库”中以实现可重用性。仅为演示目的添加StyleableExpander

ToggleButtonDownStyle

这是(非常详细的)[StyleTypedProperty(Property="ToggleButtonDownStyle", StyleTargetType=typeof(ToggleButton))] public class StyleableExpander : Expander { public static DependencyProperty ToggleButtonDownStyleProperty = DependencyProperty.Register("ToggleButtonDownStyle", typeof(Style), typeof(StyleableExpander), new FrameworkPropertyMetadata(DefaultToggleButtonDownStyle)); public Style ToggleButtonDownStyle { get { return (Style)GetValue(ToggleButtonDownStyleProperty); } set { SetValue(ToggleButtonDownStyleProperty, value); } } static StyleableExpander() { DefaultStyleKeyProperty.OverrideMetadata(typeof(StyleableExpander), new FrameworkPropertyMetadata(typeof(StyleableExpander))); } private static ResourceDictionary _resources; private static Style DefaultToggleButtonDownStyle { get { if (_resources == null) { Uri resourceLocater = new Uri("/StyleableExpanderLibrary;component/Themes/Generic.xaml", System.UriKind.Relative); _resources = (ResourceDictionary)Application.LoadComponent(resourceLocater); } return _resources["ExpanderDownHeaderStyle"] as Style; } } } 的默认样式。 Generic.xaml的StaticResource已更改为ToggleButton。要获得所有四个方向,您需要更改{TemplateBinding ExpanderDownHeaderStyle}的触发器

ExpandDirection