将App.xaml中创建的按钮添加到视图中

时间:2017-09-25 09:59:53

标签: wpf xaml mahapps.metro app.xaml

所以也许我对这个问题的解决方法是错误的,但在这里: 我使用了一个MahApps.Metro框架的Button,它已经被设计为内容 它收到一个图标。在我的项目中,我反复使用这样的代码:

<Button
    Width="30"
    Height="30"
    HorizontalContentAlignment="Center"
    VerticalContentAlignment="Center"
    BorderBrush="{DynamicResource AccentBaseColorBrush}"
    FocusVisualStyle="{DynamicResource MahApps.Metro.Styles.MetroCircleFocusVisual}"
    FontSize="16"
    Style="{DynamicResource MahApps.Metro.Styles.MetroCircleButtonStyle}">
    <iconPacks:PackIconModern
        Width="15"
        Height="15"
        HorizontalContentAlignment="Center"
        VerticalContentAlignment="Center"
        Foreground="{DynamicResource AccentBaseColorBrush}"
        Kind="Refresh" />
    <Button.ToolTip>
        <Label
            Content="{x:Static properties:Resources.TooltipUpdate}"
            FontWeight="DemiBold" />
    </Button.ToolTip>
</Button>

This is what it looks like

这就是按钮的外观。 (一个启用,两个禁用)

正如您所看到的,在具有许多视图的项目中重复使用的代码很多。所以我考虑将它添加到App.xaml并通过更改视图中的命令(和边距)来重用它们 但是我不知道该怎么做。我已经尝试添加整个按钮代码,然后只是添加x:Key,但我不知道如何在视图中使用它。我知道如何使用“全局”样式和模板,但这已经是样式和完成的控件模板,按钮之间唯一的变化是命令和偶尔工具提示。

1 个答案:

答案 0 :(得分:3)

Style中使用x:Key创建一个App.xaml,您可以使用setter定义所有默认属性值:

<Style x:Key="myStyle" TargetType="Button" BasedOn="{StaticResource MahApps.Metro.Styles.MetroCircleButtonStyle}">
    <Setter Property="Width" Value="30" />
    <Setter Property="Height" Value="30" />
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="BorderBrush" Value="{DynamicResource AccentBaseColorBrush}" />
    <Setter Property="Content">
        <Setter.Value>
            <iconPacks:PackIconModern
                        Width="15"
                        Height="15"
                        HorizontalContentAlignment="Center"
                        VerticalContentAlignment="Center"
                        Foreground="{DynamicResource AccentBaseColorBrush}"
                        Kind="Refresh" />
        </Setter.Value>
    </Setter>
</Style>

然后,您可以将Style应用于任何Button元素并覆盖您想要的任何属性:

<Button Style="{DynamicResource myStyle}" Command="{Binding YourCommand}" Margin="10">
    <iconPacks:PackIconModern
                        Width="15"
                        Height="15"
                        HorizontalContentAlignment="Center"
                        VerticalContentAlignment="Center"
                        Foreground="{DynamicResource AccentBaseColorBrush}"
                        Kind="Add" />
</Button>