我在Wpf有个扩张器。在标题,我有标签在左对齐,并希望有一个按钮在右边的网站。我使用以下XAML:
<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>但这行不通。标题中的按钮与标签旁边的左边对齐。有人能解释我怎么做对吗?
发布于 2016-11-09 13:32:19
我能够使用下面提供的xaml使标题中的内容伸缩工作。基本上,我将网格HorizontailAlignment绑定到内容演示者祖先。不幸的是,scher (数据绑定到ActualWidth)提供的解决方案可以使ui元素显示得更宽,然后在容器中显示,导致控件部分被切断。Bolu与文章"扩展头中的拉伸内容“的链接使用了后面的代码,如本例所示,这里使用的是纯xaml。
<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>发布于 2018-01-19 11:23:06
Expander标头内容演示程序将水平对齐设置为Left。
可以使用Stretch的OneWayToSource绑定将其更改为HorizontalAlignment (默认情况下为Grid的Stretch ),如下所示:
<Expander>
<Expander.Header>
<Grid Background="Yellow">
<TextBlock Text="Header"
HorizontalAlignment="{Binding HorizontalAlignment, RelativeSource={RelativeSource AncestorType=ContentPresenter}, Mode=OneWayToSource}" />
</Grid>
</Expander.Header>
</Expander>

P.S.:我花了更多的时间去理解被接受的答案的解决方案,所以我决定为未来的读者节省时间。
发布于 2015-07-02 06:53:48
我拿了博鲁联系的解决方案之一。其结果是:
<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>https://stackoverflow.com/questions/31161591
复制相似问题