我正在使用Windows Phone工具包中的ExpanderView。我添加的是每个标题下方的行。我无法做的是可扩展标头的拉伸线。

<toolkit:ExpanderView x:Name="ev" HorizontalAlignment="Stretch" Margin="0,0,0,8"
                                        Header="{Binding}"
                                        NonExpandableHeader="{Binding}"
                                        Expander="{Binding}"
                                        ItemsSource="{Binding}"
                                        IsNonExpandable="{Binding HasSingleMessage}">

<toolkit:ExpanderView.HeaderTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text="{Binding LastMessageReceived.Header}"
            HorizontalAlignment="Stretch"
            Foreground="Black"
            FontSize="{StaticResource PhoneFontSizeLarge}"
            FontFamily="{StaticResource PhoneFontFamilySemiLight}"/>
            <Rectangle Height="1" StrokeThickness="0" Fill="Black" Margin="0,8" />
        </StackPanel>
    </DataTemplate>
</toolkit:ExpanderView.HeaderTemplate>

最佳答案

深入了解这有点棘手。最重要的是,我认为获得所需结果的唯一方法(扩展该行)是在XAML资源中包含control template的修改版本,并使标头拉伸以填充其容器。

如果在链接上检查源代码,然后向下滚动到ExpanderView控件模板,您将看到header元素的定义如下:

<ListBoxItem x:Name="ExpandableContent" controls:TiltEffect.IsTiltEnabled="True"
                                     Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="2">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="41"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <ContentControl x:Name="Header"
                        HorizontalContentAlignment="Stretch"
                        HorizontalAlignment="Stretch"
                        Content="{TemplateBinding Header}"
                        ContentTemplate="{TemplateBinding HeaderTemplate}"
                        Grid.Row="0" Grid.Column="0"
                        Grid.ColumnSpan="2"/>
        <ContentControl x:Name="Expander"
                        Margin="11,0,0,0"
                        Grid.Row="1" Grid.Column="1"
                        HorizontalContentAlignment="Stretch"
                        HorizontalAlignment="Stretch"
                        Content="{TemplateBinding Expander}"
                        ContentTemplate="{TemplateBinding ExpanderTemplate}"/>
        <Grid x:Name="ExpanderPanel" Grid.Row="0" Grid.Column="0"
              Grid.RowSpan="2" Grid.ColumnSpan="2" Background="Transparent"/>
    </Grid>
</ListBoxItem>


现在,乍一看,这看起来不错,因为“标头” ContentControl将HorizontalAlignmentHorizontalContentAlignment都设置为“ Stretch”。不幸的是,父ListBoxItem没有定义其HorizontalContentAlignment,其默认值可能不是“ Stretch”。 (我不确定这一点,因为MSDN documentation没有列出默认值-但相应属性的默认值为"Left" in WPF"Center" in Silverlight。)

因此,我将尝试将默认控件模板复制到您的应用程序资源中,并将适当的对齐方式添加到“ ExpandableContent” ListBoxItem中:

<ListBoxItem x:Name="ExpandableContent"
             HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" ...

关于c# - Windows Phone工具包中带有ExpanderView的自定义 header ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26362978/

10-12 14:59