我有一个带有自定义标题的模板化扩展器。
我删除了ToggleButton部分,因此Header可以填充扩展器的所有顶部
我有2种全局模式 MidiSenderMode.Play 和 MidiSenderMode.Edit 。
如果我们处于播放模式,则标题将是一个按钮,无论是否按下它,扩展器都将始终折叠。
如果我们处于编辑模式,我想将Expander的 IsExpanded 与ToggleButton的 IsChecked 绑定。
我创建了2个模板和一个模板选择器
<!--EXPANDER HEADER TEMPLATE(TOGGLE BUTTON)-->
<DataTemplate x:Key="ExpanderHeaderToggleButtonTemplate"
DataType="local:MidiSenderModel">
<ToggleButton
Background="{Binding BindsDirectlyToSource=True}">
<StackPanel>
<!--CONTENT-->
</StackPanel>
</ToggleButton>
</DataTemplate>
<!--EXPANDER HEADER TEAMPLATE(BUTTON)-->
<DataTemplate x:Key="ExpanderHeaderButtonTemplate"
DataType="local:MidiSenderModel">
<Button Background="{Binding BindsDirectlyToSource=True}">
<StackPanel>
<!--CONTENT-->
</StackPanel>
</Button>
</DataTemplate>
// TEMPLATE SELECTOR
public class MidiSenderButtonGadgetTemplateSelector : DataTemplateSelector
{
public DataTemplate PlayModeHeaderTemplate { get; set; }
public DataTemplate EditModeHeaderTeamplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
MidiSenderMode? mode = item == null ? (MidiSenderMode?)null : (MidiSenderMode)item;
return (mode == null || mode.Value == MidiSenderMode.Play) ?
PlayModeHeaderTemplate : EditModeHeaderTeamplate;
}
}
<!--TEMPLATE SELECTOR-->
<local:MidiSenderButtonGadgetTemplateSelector
x:Key="MidiSenderButtonTemplateSelector"
EditModeHeaderTeamplate="{StaticResource ExpanderHeaderToggleButtonTemplate}"
PlayModeHeaderTemplate="{StaticResource ExpanderHeaderButtonTemplate}"/>
是否有办法将IsExpanded与第一个模板的ToggleButton绑定,并仅在这种情况下扩展?
<Expander Header="{Binding Mode}" HeaderTemplateSelector="{StaticResource MidiSenderButtonTemplateSelector}"
IsExpanded="???">
<!--CONTENT-->
</Expander>