none
怎么绑定控件模版中Expander控件的Header属性 RRS feed

  • 问题

  • <ControlTemplate x:Key="ExpandListItemTemplate" TargetType="{x:Type ListBoxItem}">
                <Border BorderThickness="1">
                    <Border CornerRadius="3" Padding="2,1,2,2" BorderThickness="1" BorderBrush="#FF666670">
                        <Expander Header="Header" Content="{TemplateBinding Content}"
                                   IsExpanded="{Binding IsSelected,RelativeSource={RelativeSource TemplatedParent}}" />
                    </Border>
                </Border>
            </ControlTemplate>

            <Style x:Key="ExpandListItemStyle" TargetType="{x:Type ListBoxItem}">
                <Setter Property="Template" Value="{StaticResource ExpandListItemTemplate}" />
            </Style>

            <Style x:Key="MostSimple" TargetType="{x:Type ListBox}">
                <Setter Property="SelectionMode" Value="Single" />
                <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled" />
                <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
                <Setter Property="ItemContainerStyle" Value="{StaticResource ExpandListItemStyle}" />
            </Style>

    使用:

    <ListBox Style="{StaticResource MostSimple}">
                    <ListBoxItem Content="欢迎界面"/>
                    <ListBoxItem >
                        <ListBox >
                            <ListBoxItem >全部联系人</ListBoxItem>
                            <ListBoxItem >有电话联系人</ListBoxItem>
                        </ListBox>
                    </ListBoxItem>

    </ListBox>

    如上所示Expander中的Header值都为Header,如果我想在使用的时候自定义内容,该怎么绑定,比如 <ListBoxItem Content="欢迎界面"/>,ExPander的Header值为"欢迎界面",

                   
    2012年8月23日 3:10

答案

  • TemplateBinding,你在绑定Expander的Content的时候已经使用过。

    你可以绑定任何ListBoxItem的属性,在这里我举个例子:

            <ListBox Style="{StaticResource MostSimple}">
                <ListBoxItem Content="欢迎界面" Tag="Item1" />
                <ListBoxItem Tag="Item2">
                    <ListBox >
                        <ListBoxItem >全部联系人</ListBoxItem>
                        <ListBoxItem >有电话联系人</ListBoxItem>
                    </ListBox>
                </ListBoxItem>
            </ListBox>

    绑定时使用:

    Header="{TemplateBinding Tag}"

    你也同样可以使用ToolTip等属性


    Wanpeng wanpeng.ones@gmail.com

    2012年8月23日 3:39
  • 从Expander的控件模板可以看出那个箭头是由Path决定的, 一个比较简单的方法就是设置 Path 的 Fill 或者 Strock属性为透明色, 或者把它的 Opacity设为 0. 假如说你要完全的remove掉那个箭头,可以看下这个帖子里给出的解决方案。http://stackoverflow.com/questions/1070685/hidding-the-arrows-for-the-wpf-expander-control

    Have a nice day,


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月24日 8:15
    版主

全部回复

  • TemplateBinding,你在绑定Expander的Content的时候已经使用过。

    你可以绑定任何ListBoxItem的属性,在这里我举个例子:

            <ListBox Style="{StaticResource MostSimple}">
                <ListBoxItem Content="欢迎界面" Tag="Item1" />
                <ListBoxItem Tag="Item2">
                    <ListBox >
                        <ListBoxItem >全部联系人</ListBoxItem>
                        <ListBoxItem >有电话联系人</ListBoxItem>
                    </ListBox>
                </ListBoxItem>
            </ListBox>

    绑定时使用:

    Header="{TemplateBinding Tag}"

    你也同样可以使用ToolTip等属性


    Wanpeng wanpeng.ones@gmail.com

    2012年8月23日 3:39
  • <Expander Header="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Content}"
                                    IsExpanded="{Binding IsSelected,RelativeSource={RelativeSource TemplatedParent}}" />
    2012年8月23日 3:58
  • 这样可以.怎么自定义Expander控件把箭头去掉,有没相关代码?
    2012年8月24日 2:01
  • 从Expander的控件模板可以看出那个箭头是由Path决定的, 一个比较简单的方法就是设置 Path 的 Fill 或者 Strock属性为透明色, 或者把它的 Opacity设为 0. 假如说你要完全的remove掉那个箭头,可以看下这个帖子里给出的解决方案。http://stackoverflow.com/questions/1070685/hidding-the-arrows-for-the-wpf-expander-control

    Have a nice day,


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月24日 8:15
    版主