C# 如何使用wpf展开器校准

C# 如何使用wpf展开器校准,c#,.net,wpf,C#,.net,Wpf,我试图创建一个WPF窗口,当用户单击More expander按钮时,它有一个简单的扩展器来扩展datagrid。当用户想要隐藏datagrid时,用户只需点击较小的扩展按钮 我还使用坞面板来分离页眉、左、右和页脚 问题是: 我想让less按钮在用户之前位于中间 单击“更多扩展器”按钮。当用户单击更多 扩展器按钮,less按钮将被推到左侧,以显示 右边是datagrid 当扩展器关闭并关闭时,如何更改其名称 打开我可以在xaml级别执行吗 下面是xaml代码: <Window x:Clas

我试图创建一个WPF窗口,当用户单击More expander按钮时,它有一个简单的扩展器来扩展datagrid。当用户想要隐藏datagrid时,用户只需点击较小的扩展按钮

我还使用坞面板来分离页眉、左、右和页脚

问题是:

  • 我想让less按钮在用户之前位于中间 单击“更多扩展器”按钮。当用户单击更多 扩展器按钮,less按钮将被推到左侧,以显示 右边是datagrid
  • 当扩展器关闭并关闭时,如何更改其名称 打开我可以在xaml级别执行吗
  • 下面是xaml代码:

    <Window x:Class="M.SalesWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="SalesWindow" Height="300" Width="300">
        <DockPanel>
    
            <StackPanel DockPanel.Dock="Top">
                <Label FontSize="28" Content="Sales">
                </Label>
            </StackPanel>
    
            <StackPanel DockPanel.Dock="Left" Width="auto" HorizontalAlignment="Center">
                <Label FontSize="15" Content="Enter Amount" Height="26" Width="168" />
                <Separator Width="168" />
            </StackPanel>
    
            <StackPanel DockPanel.Dock="Right">
                <Expander ExpandDirection="Left" HorizontalAlignment="Right" VerticalAlignment="Stretch">
                    <Expander.Header>
                        <TextBlock Text="More">
                        <TextBlock.LayoutTransform>
                            <RotateTransform Angle="-90"/>
                        </TextBlock.LayoutTransform>
                        </TextBlock>
                    </Expander.Header>
                    <Expander.Content>
                        <StackPanel>
                            <DataGrid ItemsSource="{Binding Products}">
    
                            </DataGrid>
                        </StackPanel>
                    </Expander.Content>
                </Expander>
            </StackPanel>
    
        </DockPanel>
    </Window>
    
    
    

    谢谢。

    用下面的代码替换您的代码,看看它的神奇之处。这也将根据您的要求解决对齐问题。我已经删除了DockPanel,因为您可以使用这段代码获得类似的结果

    <StackPanel>
        <StackPanel>
            <Label FontSize="28" Content="Sales">
            </Label>
        </StackPanel>
    
        <Grid>
            <Grid.ColumnDefinitions>                
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <StackPanel Grid.Column="0" HorizontalAlignment="Center">
                <Label FontSize="15" Content="Enter Amount" Height="26" Width="168" />
                <Separator Width="168" />
            </StackPanel>
    
             <Expander Grid.Column="1" ExpandDirection="Left" HorizontalAlignment="Right" VerticalAlignment="Stretch">
                <Expander.Style>
                    <Style TargetType="Expander">
                        <Setter Property="IsExpanded" Value="False" />
                        <Setter Property="Header">
                            <Setter.Value>
                                <TextBlock Text="Less">
                                    <TextBlock.LayoutTransform>
                                        <RotateTransform Angle="-90"/>
                                    </TextBlock.LayoutTransform>
                                </TextBlock>
                            </Setter.Value>
                        </Setter>
    
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsExpanded,RelativeSource={RelativeSource Self}}" Value="True">
                                <Setter Property="Header">
                                    <Setter.Value>
                                        <TextBlock Text="More">
                                            <TextBlock.LayoutTransform>
                                                <RotateTransform Angle="-90"/>
                                            </TextBlock.LayoutTransform>
                                        </TextBlock>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Expander.Style>
                <Expander.Content>
                    <StackPanel>
                        <DataGrid ItemsSource="{Binding Products}">
    
                        </DataGrid>
                    </StackPanel>
                </Expander.Content>
            </Expander>
    
        </Grid>
    </StackPanel>
    
    
    
    技巧在于下面几行代码

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    
    
    
    感谢您的努力,这不是我想要的,与我之前的屏幕一样。我希望函数在点击Expense按钮之前位于中间。我认为应该切换列定义,因此自动在右侧。我已再次编辑代码,以满足您的第二个要求,但我错过了。因此,现在您可以根据展开的属性更改文本。希望这能彻底解决你的问题。