如何在XAML代码中优化按钮样式?

时间:2017-08-30 03:59:57

标签: wpf xaml

<Style x:Key="ToolBarButton" TargetType="{x:Type Button}">
        <Setter Property="Control.Background" Value="#00000000"/>
        <Setter Property="Control.Width" Value="25"/>
        <Setter Property="Control.Height" Value="25"/>
</Style>

...

    <Grid HorizontalAlignment="Left">
        <Button Style="{StaticResource ToolBarButton}"/>
        <Button Style="{StaticResource ToolBarButton}"/>
        <Button Style="{StaticResource ToolBarButton}"/>
        <Button Style="{StaticResource ToolBarButton}"/>
        <Button Style="{StaticResource ToolBarButton}"/>
        <Button Style="{StaticResource ToolBarButton}"/>
    </Grid>

我想优化我的XAML代码。我不想为每个按钮分配一个样式,但我希望每个按钮都有我的风格。

有可能做这样的事吗?只有工作......:)

<Grid x:Name="gToolBar" Grid.Row="1" HorizontalAlignment="Left" Style="{StaticResource ToolBarButton}">
        <Button/>
        <Button/>
        <Button/>
        <Button/>
        <Button/>
        <Button/>
    </Grid>

我不仅仅使用TargetType,因为我有其他不同风格的按钮。 我认为它可用,但我不知道如何。

...谢谢

3 个答案:

答案 0 :(得分:1)

正如我已经说过评论中要做的所有事情,但需要进一步澄清:

  

我想优化我的XAML代码。我不想为每个按钮指定一个样式,但我希望每个按钮都有我的风格。

Style部分移至 App.xaml 文件中的<Application.Resources>,如下所示:

<Application.Resources>
   <Style TargetType="Button" >
     <Setter Property="Control.Background" Value="#00000000"/>
     <Setter Property="Control.Width" Value="25"/>
     <Setter Property="Control.Height" Value="25"/>
   </Style>
</Application.Resources>

注意:我已删除x:Key部分。现在这将适用于应用程序中的所有按钮。

  

我不仅使用TargetType,因为我有其他具有不同样式的按钮。我认为它可用,但我不知道如何。

为此,您必须将自定义按钮设为UserControl,从而使它们与通常的Button完全不同。在他们自己的UserControl.Resources中为他们应用样式。因此App.Resources中提到的样式不会影响这些自定义 UserControls

答案 1 :(得分:0)

您应该使用应用程序资源来执行此操作。将此代码添加到那里(app.xaml):

<Application.Resources>
  <Style TargetType="Button" >
    <Setter Property="Control.Background" Value="#00000000"/>
    <Setter Property="Control.Width" Value="25"/>
    <Setter Property="Control.Height" Value="25"/>
  </Style>
</Application.Resources>

<强>更新 或者,如果您希望此样式仅应用于应用程序的某些部分,例如一些特殊的“网格”和“网格”。或特殊Window ...,只需将其放在该元素的Resource内:

<Grid>
  <Grid.Resources>
    <Style TargetType="Button" >
      <Setter Property="Control.Background" Value="#00000000"/>
      <Setter Property="Control.Width" Value="25"/>
      <Setter Property="Control.Height" Value="25"/>
    </Style>
  </Grid.Resources>

   ... inside code, and your buttons which we eant to apply style for them.

</Grid>

答案 2 :(得分:0)

您可以为网格中的按钮创建默认样式:

<Window ...>
    <Window.Resources>
        <Style x:Key="ToolBarButton" TargetType="{x:Type Button}">
            <Setter Property="Control.Background" Value="#00000000"/>
            <Setter Property="Control.Width" Value="25"/>
            <Setter Property="Control.Height" Value="25"/>
        </Style>
    </Window.Resources>
    <Grid HorizontalAlignment="Left">
        <Grid.Resources>
            <Style x:Key="{x:Type Button}" BasedOn="{StaticResource ToolBarButton}" TargetType="{x:Type Button}"></Style>
        </Grid.Resources>
        <Button />
        <Button />
        <Button />
        <Button />
        <Button />
        <Button />
    </Grid>
</Window>

如果在容器中创建使用控件类型作为键的资源,则该样式将应用于容器中该类型的所有控件。如果您想在其他地方定义原始样式(例如,因为您在许多地方使用它),您可以将本地样式基于全局样式。