I want the red button in the expander header to be docked right. How can I do this? enter image description here

<StackPanel Orientation="Vertical" x:Name="spTest" Margin="10">
    <Border BorderBrush="Black" BorderThickness="1">
        <Expander Margin="5,0,5,0">
            <Expander.Header>
                <Grid Margin="5,0,0,0" HorizontalAlignment="Stretch">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="40"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="TEXT1 1231521312"  Grid.Column="0" FontSize="18" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
                    <TextBlock Grid.Column="1" FontSize="18" FontStyle="Italic" Margin="10,0,10,0" Foreground="Black" VerticalAlignment="Center" Text="Text2"/>
                    <Button x:Name="btnRemove" Grid.Column="2" Width="40" Height="40" Background="#F8CECC" Content="X" FontWeight="Normal" FontSize="18" BorderBrush="#B95753"/>
                </Grid>
            </Expander.Header>
        </Expander>
    </Border>
</StackPanel>

谢谢你!

推荐答案

该问题来自于默认模板中用于标题的ContentPresenter.ContentPresenterHorizontalAlignment,而不是Stretch.要更改它,您可以try 将Grid中的HorizontalAlignment绑定到ContentPresenter中的HorizontalAlignment.

<StackPanel Orientation="Vertical" x:Name="spTest" Margin="10">
    <Border BorderBrush="Black" BorderThickness="1">
        <Expander Margin="5,0,5,0">
            <Expander.Header>
                <Grid Margin="5,0,0,0" 

                    HorizontalAlignment="{Binding HorizontalAlignment, RelativeSource={RelativeSource AncestorType=ContentPresenter}, Mode=OneWayToSource}">

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="40"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="TEXT1 1231521312"  Grid.Column="0" FontSize="18" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
                    <TextBlock Grid.Column="1" FontSize="18" FontStyle="Italic" Margin="10,0,10,0" Foreground="Black" VerticalAlignment="Center" Text="Text2"/>
                    <Button x:Name="btnRemove" Grid.Column="2" Width="40" Height="40" Background="#F8CECC" Content="X" FontWeight="Normal" FontSize="18" BorderBrush="#B95753"/>
                </Grid>
            </Expander.Header>
        </Expander>
    </Border>
</StackPanel>

另一种适用于嵌套Expander的方法是设置/绑定Grid.Width.

<Grid Margin="5,0,0,0" Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Expander}, Converter={StaticResource SubtractConverter}, ConverterParameter=5}">

public class SubtractConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return 
            (double)value 
            - 20/*Default template: Grid's column width */ 
            - 4/*Default template: margin of ContentPresenter*/ 
            - 2/*Default template:  2*BorderThikness */ 
            - double.Parse(parameter as string) /*Margin of Grid in Header*/;
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
    {
        return value;
    }
}

另一种方式是覆盖Expander种子Expander Styles and Templates的默认模板.

Csharp相关问答推荐

C++/C#HostFXR通过std::tuple传递参数

ASP.NET Core AutoMapper:如何解决错误 CS0121调用在以下方法或属性之间不明确

如何使用C#获取FireStore中的列表输出文档

ASP.NET配置kestrel以使用Windows证书存储中的HTTPS

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

如何防止Visual Studio断点以红色突出显示到整行?

.NET 8在appsettings.json中核心使用词典URI、URI&>

如何从Entity Framework Core中填充ListIInterface

从Base64转换为不同的字符串返回相同的结果

.NET8Blazor-为什么Rapzor渲染在for循环之后显示?

是否可以从IQueryable T中获取一个IdentyEntry T>

C#;AvaloniaUI;MVVM;当另一个窗口上的按钮被单击时,如何更新视图图像源?

Xamarin.Forms项目中缺少MainPage.xaml

如何更改Datagridview行标题

身份验证中间件如何处理多个方案

使用生产环境调试我的应用程序的快速方法

为什么我不能在固定语句中使用外部函数?

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>

如何在C#中加载证书包?

如何在列表框中显示UserControl对象?