wpf 如何从代码后面“调用”我的样式化按钮(XAML)

sauutmhj  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(170)

我有一个按钮,在XAML,我风格的方式,我需要它。这是该按钮的XAML代码:

<Button x:Name="btnAddNewItem"
            Grid.Column="0" Grid.Row="0"
            FontSize="15"
            BorderThickness="1.5"
            HorizontalContentAlignment="Center"
            VerticalContentAlignment="Center"
            Foreground="White"
            Background="White"
            BorderBrush="#0091EA" Margin="5,0,0,0" Height="90" Width="90">
            <Button.Template>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border BorderThickness="{TemplateBinding BorderThickness}"
            BorderBrush="{TemplateBinding BorderBrush}"
            Background="{TemplateBinding Background}">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Border>
                </ControlTemplate>
            </Button.Template>

我想实现这样的东西,所以我想删除xaml按钮,并在需要时以编程方式创建相同的按钮,具有相同的风格和我在xaml中所做的一切,例如我想如何创建它:

private void AddSubmenuButton(string name)
 {
            MyButton button = new MyButton();
            button.ButtonText = name;
 }

这是否可能,如果可能:怎么做?
P.S我尝试了经典的方式,像这样:

Button a = new Button();
            a.BorderThickness = new Thickness(1);
            a.Foreground = new SolidColorBrush(Colors.Black);
            a.BorderBrush = mySolidColorBrush;
            a.Content = "Button1";
            a.Width = 90;
            a.Height = 90;

但我得到了这个:

这是可能的注意到,厚度它不是1在所有,它有一些奇怪的值,我不知道如何改变它。这就是为什么我在xaml中创建button的原因,它看起来更好,我想从代码后面调用它/创建它。

编辑:

感谢您的评分!就是这样!**
这是真棒队友,但如果我想把图标+文字在我的按钮,我会ussualy添加这样的东西,它对我来说很好:

<Grid>
    <Grid.RowDefinitions>
    <RowDefinition Height="80*">
    <RowDefinition Height="20*"/>
</Grid.RowDefinitions>
    <Image Source="/MyProject.Wpf;component/Icons/customer-icon.png" Margin="10" Grid.Row="0" Width="Auto"/>
    <TextBlock Foreground="Black" Margin="0,0,0,3" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" >Izlaz</TextBlock>
</Grid>

如你所见,我会将网格添加到我的按钮,它看起来像这样:

<Button x:Name="btnAddNewItem"
                    Grid.Column="0" Grid.Row="0"
                    FontSize="15"
                    ToolTip="Podaci"
                    BorderThickness="1.5"
                    HorizontalContentAlignment="Center"
                    VerticalContentAlignment="Center"
                    Foreground="White"
                    Background="White"
                    BorderBrush="#0091EA" Margin="5,0,0,0" Height="90" Width="90">
                    <Button.Template>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border BorderThickness="{TemplateBinding BorderThickness}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    Background="{TemplateBinding Background}">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                            </Border>
                        </ControlTemplate>
                    </Button.Template>
        <Grid>
         <Grid.RowDefinitions>
            <RowDefinition Height="80*">
            <RowDefinition Height="20*"/>
        </Grid.RowDefinitions>
            <Image Source="/MyProject.Wpf;component/Icons/customer-icon.png" Margin="10" Grid.Row="0" Width="Auto"/>
            <TextBlock Foreground="Black" Margin="0,0,0,3" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" >Izlaz</TextBlock>
        </Grid>
                    </Button>

所以我能以某种方式实现这一点(图像+文本在我的按钮)也创建它的编程。

pgvzfuti

pgvzfuti1#

在App.xaml中定义样式:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApplication1"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style x:Key="theStyle" TargetType="Button">
            <Setter Property="FontSize" Value="15" />
            <Setter Property="BorderThickness" Value="1.5" />
            <Setter Property="HorizontalContentAlignment" Value="Center" />
            <!-- and so on for each property...-->
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border BorderThickness="{TemplateBinding BorderThickness}"
            BorderBrush="{TemplateBinding BorderBrush}"
            Background="{TemplateBinding Background}">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Application.Resources>
</Application>

然后,您可以将此样式应用于应用程序中的任何Button,无论是在XAML:

<Button x:Name="btnAddNewItem" Style="{StaticResource myStyle}"/>

...或编程:

Button button = new Button();
button.Style = Application.Current.Resources["myStyle"] as Style;

相关问题