带有HeaderTemplateSelector的Wpf Expander仅将IsExpanded绑定到一个特定的模板

时间:2014-07-01 20:45:29

标签: c# wpf

我有一个带有自定义标题的模板化扩展器。

我删除了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>

0 个答案:

没有答案