首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF Expander.Header水平拉伸

WPF Expander.Header水平拉伸
EN

Stack Overflow用户
提问于 2015-07-01 12:39:19
回答 5查看 14.1K关注 0票数 13

我在Wpf有个扩张器。在标题,我有标签在左对齐,并希望有一个按钮在右边的网站。我使用以下XAML:

代码语言:javascript
复制
<Expander HorizontalAlignment="Stretch" IsExpanded="True">
    <Expander.Header >
        <Grid HorizontalAlignment="Stretch" Background="Aqua" Margin="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Label Grid.Column="0" Content="Label on the left site"/>
            <Button Grid.Column="1" Content="Button on the right"/>
         </Grid>
    </Expander.Header>
    <Label Content="Some Content"/>
</Expander>

但这行不通。标题中的按钮与标签旁边的左边对齐。有人能解释我怎么做对吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-11-09 13:32:19

我能够使用下面提供的xaml使标题中的内容伸缩工作。基本上,我将网格HorizontailAlignment绑定到内容演示者祖先。不幸的是,scher (数据绑定到ActualWidth)提供的解决方案可以使ui元素显示得更宽,然后在容器中显示,导致控件部分被切断。Bolu与文章"扩展头中的拉伸内容“的链接使用了后面的代码,如本例所示,这里使用的是纯xaml。

代码语言:javascript
复制
<ItemsControl x:Name="ItemGroups" Grid.Column="2" Grid.Row="0"   ItemsSource="{Binding Model.ItemGroups}" ScrollViewer.VerticalScrollBarVisibility="Auto" >
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Expander Margin="4,0"   Header="{Binding}">
                        <Expander.HeaderTemplate>
                            <DataTemplate>
                                <Grid  HorizontalAlignment="{Binding Path=HorizontalAlignment, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}}, Mode=OneWayToSource}" >
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition   />
                                        <ColumnDefinition  Width="Auto"/>
                                        <ColumnDefinition  Width="64"/>
                                    </Grid.ColumnDefinitions>

                                    <TextBox Grid.Column="0"  Text="{Binding Name, Mode=TwoWay}" />
                                    <TextBlock Grid.Column="1" Text="{Binding TotalCostString}" Margin="4,0"/>
                                    <Button Grid.Column="2" Command="{Binding DataContext.RemoveItemGroup, ElementName=ItemGroups, Mode=OneWay}" CommandParameter="{Binding}" Content="Remove"/>
                                </Grid>         
                            </DataTemplate>
                        </Expander.HeaderTemplate>
                        <Expander.Content>
                            <TextBlock Text="{Binding Summary}"></TextBlock>
                        </Expander.Content>
                    </Expander>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
票数 22
EN

Stack Overflow用户

发布于 2018-01-19 11:23:06

Expander标头内容演示程序将水平对齐设置为Left

可以使用StretchOneWayToSource绑定将其更改为HorizontalAlignment (默认情况下为GridStretch ),如下所示:

代码语言:javascript
复制
<Expander>
    <Expander.Header>
        <Grid Background="Yellow">
            <TextBlock Text="Header"
                       HorizontalAlignment="{Binding HorizontalAlignment, RelativeSource={RelativeSource AncestorType=ContentPresenter}, Mode=OneWayToSource}" />
        </Grid>
    </Expander.Header>
</Expander>

P.S.:我花了更多的时间去理解被接受的答案的解决方案,所以我决定为未来的读者节省时间。

票数 42
EN

Stack Overflow用户

发布于 2015-07-02 06:53:48

我拿了博鲁联系的解决方案之一。其结果是:

代码语言:javascript
复制
    <Expander HorizontalAlignment="Stretch" IsExpanded="True">
        <Expander.Header >
            <!-- Width-Binding is needed, to fill the whole header horizontally-->
            <Grid HorizontalAlignment="Stretch" Background="Aqua" Margin="0" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}}, Path=ActualWidth}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Content="Label on the left site"/>
                <!-- Margin is needed, to bring the Button into the view -->
                <Button Grid.Column="1" Content="Button on the right" Margin="0,0,40,0"/>
            </Grid>
        </Expander.Header>
        <Label Content="Some Content"/>
    </Expander>
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31161591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档