如何对齐此 StackPanel 下方的按钮,如何在代码中使用设置按钮

Hui Liu-MSFT 47,421 信誉分 Microsoft 供应商
2024-02-29T06:41:45.4133333+00:00

<Window x:Class="WpfApplication1.Window2"  
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
xmlns:local="clr-namespace:WpfApplication1"  
mc:Ignorable="d"  
Title="Window2" Height="300" Width="300">  
<Window.Resources>  
<SolidColorBrush x:Key="TabItem.Selected.Background" Color="#FFFFFF"/>  
<SolidColorBrush x:Key="TabItem.Selected.Border" Color="#ACACAC"/>  
<Style x:Key="TabControlStyle1" TargetType="{x:Type TabControl}">  
<Setter Property="Padding" Value="2"/>  
<Setter Property="HorizontalContentAlignment" Value="Center"/>  
<Setter Property="VerticalContentAlignment" Value="Center"/>  
<Setter Property="Background" Value="{StaticResource TabItem.Selected.Background}"/>  
<Setter Property="BorderBrush" Value="{StaticResource TabItem.Selected.Border}"/>  
<Setter Property="BorderThickness" Value="1"/>  
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>  
<Setter Property="Template">  
<Setter.Value>  
<ControlTemplate TargetType="{x:Type TabControl}">  
<Grid x:Name="templateRoot" ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">  
<Grid.ColumnDefinitions>  
<ColumnDefinition x:Name="ColumnDefinition0"/>  
<ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>  
</Grid.ColumnDefinitions>  
<Grid.RowDefinitions>  
<RowDefinition x:Name="RowDefinition0" Height="Auto"/>  
<RowDefinition x:Name="RowDefinition1" Height="*"/>  
</Grid.RowDefinitions>  
<StackPanel Orientation="Horizontal" Grid.Column="0">  
<TabPanel x:Name="headerPanel" Background="Transparent" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>  
<Button Content="My Button..."/>  
</StackPanel>
  
<Border x:Name="contentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
                            <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="TabStripPlacement" Value="Bottom">
                            <Setter Property="Grid.Row" TargetName="headerPanel" Value="1"/>
                            <Setter Property="Grid.Row" TargetName="contentPanel" Value="0"/>
                            <Setter Property="Height" TargetName="RowDefinition0" Value="*"/>
                            <Setter Property="Height" TargetName="RowDefinition1" Value="Auto"/>
                            <Setter Property="Margin" TargetName="headerPanel" Value="2,0,2,2"/>
                        </Trigger>
                        <Trigger Property="TabStripPlacement" Value="Left">
                            <Setter Property="Grid.Row" TargetName="headerPanel" Value="0"/>
                            <Setter Property="Grid.Row" TargetName="contentPanel" Value="0"/>
                            <Setter Property="Grid.Column" TargetName="headerPanel" Value="0"/>
                            <Setter Property="Grid.Column" TargetName="contentPanel" Value="1"/>
                            <Setter Property="Width" TargetName="ColumnDefinition0" Value="Auto"/>
                            <Setter Property="Width" TargetName="ColumnDefinition1" Value="*"/>
                            <Setter Property="Height" TargetName="RowDefinition0" Value="*"/>
                            <Setter Property="Height" TargetName="RowDefinition1" Value="0"/>
                            <Setter Property="Margin" TargetName="headerPanel" Value="2,2,0,2"/>
                        </Trigger>
                        <Trigger Property="TabStripPlacement" Value="Right">
                            <Setter Property="Grid.Row" TargetName="headerPanel" Value="0"/>
                            <Setter Property="Grid.Row" TargetName="contentPanel" Value="0"/>
                            <Setter Property="Grid.Column" TargetName="headerPanel" Value="1"/>
                            <Setter Property="Grid.Column" TargetName="contentPanel" Value="0"/>
                            <Setter Property="Width" TargetName="ColumnDefinition0" Value="*"/>
                            <Setter Property="Width" TargetName="ColumnDefinition1" Value="Auto"/>
                            <Setter Property="Height" TargetName="RowDefinition0" Value="*"/>
                            <Setter Property="Height" TargetName="RowDefinition1" Value="0"/>
                            <Setter Property="Margin" TargetName="headerPanel" Value="0,2,2,2"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<StackPanel>
    <TabControl Style="{DynamicResource TabControlStyle1}">
        <TabItem Header="1"/>
        <TabItem Header="2"/>
    </TabControl>
</StackPanel>
</Window>


Note:此问题总结整理于:how to align the button right under this stackpanel, how to use set the button in code

Windows Presentation Foundation
Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
122 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 43,046 信誉分 Microsoft 供应商
    2024-02-29T07:26:41.21+00:00

    若要在应用模板后查找模板中的元素,可以调用模板的 FindName 方法。我按如下方式更新您的代码。有关更多信息,您也可以参考此处

    MainWindow.xaml.cs代码:

    private void Button_Click(object sender, RoutedEventArgs e)  
        {  
          Button btnContent = (Button)tabControl.Template.FindName("testBtn", tabControl);  
          MessageBox.Show(btnContent.GetValue(Button.ContentProperty).ToString());  
        }
    

    ControlTemplate 中的按钮:

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"  Grid.Column="0">  
             <Button Name="testBtn" Content="My Button..."/>  
    </StackPanel>  
    

    为 TabControl 命名并添加一个按钮:

    <StackPanel>  
            <TabControl Name="tabControl" Style="{DynamicResource TabControlStyle1}">  
                <TabItem Header="1"/>  
                <TabItem Header="2"/>  
            </TabControl>  
            <Button Content="click" Click="Button_Click"></Button>  
        </StackPanel>
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助