在xaml中设置按钮样式

时间:2016-03-01 08:12:30

标签: c# wpf xaml

我正在尝试为某些按钮创建一个样式,起初我为按钮创建了一个样式,但之后我需要一个图标,所以我将图标放在样式中。

然而,这不是可行的方法,我无法获得按钮中的图标,但不符合风格。

代码风格:

<Style x:Name="stlBtnOpen" x:Key="stlBtnOpen" TargetType="Button">
      <Setter Property="Template">
          <Setter.Value>
              <ControlTemplate TargetType="Button">
                  <Border x:Name="borderBtnOpen" CornerRadius="10" BorderBrush="DarkGray" BorderThickness="1" Background="Transparent">
                      <Grid Background="{DynamicResource AccentColorBrush}" Margin="6">
                          <Grid.OpacityMask>
                              <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_folder}"/>
                          </Grid.OpacityMask>
                      </Grid>
                  </Border>
                  <ControlTemplate.Triggers>
                       //some events
                  </ControlTemplate.Triggers>
              </ControlTemplate>
          </Setter.Value>
      </Setter>
</Style>
元素中的

代码:

<Button Grid.Column="2" x:Name="btnOpen" Click="btnOpen_Click">
      <Border x:Name="borderBtnOpen" CornerRadius="10" BorderBrush="DarkGray" BorderThickness="1" Background="Transparent">
           <Grid Background="{DynamicResource AccentColorBrush}" Margin="6">
                <Grid.OpacityMask>
                   <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_folder}"/>
                </Grid.OpacityMask>
           </Grid>
       </Border>
</Button>

1 个答案:

答案 0 :(得分:2)

*您是否尝试将图片放入您按下按钮的网格中:

df$Filter <- apply(df, 1, function(x) length(which(x=='Y')))


#    Fashion Travel Home Electronics Toys Filter
#1       Y      N    N           N    N      1
#2       N      N    N           Y    N      1
#3       Y      Y    Y           Y    N      4
#4       Y      N    N           N    N      1
#5       Y      Y    Y           Y    Y      5
#6       Y      Y    N           Y    Y      4

从内存中获取,但它不应该与您的需求相距太远(您也可以将<Button Grid.Column="2" x:Name="btnOpen" Click="btnOpen_Click"> <Border x:Name="borderBtnOpen" CornerRadius="10" BorderBrush="DarkGray" BorderThickness="1" Background="Transparent"> <Grid Background="{DynamicResource AccentColorBrush}" Margin="6"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Rectangle Grid.Column="0"> <Rectangle.Fill> <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_folder}"/> </Rectangle.Fill> </Rectangle> <Textblock Grid.Column="1"/> </Grid> </Border> </Button> 替换为grid,这将减少列定义中的样板文件)

如果你想在你的按钮上放一些东西,不要忘记在文本块中添加东西:)

编辑: 那么这对我来说很有用,但是使用画笔填充另一个对象有一些固有的问题。

但首先是 EXACT 工作标记

stackpanel

这里有两个问题:

  • 边框不会扩展到按钮大小(如果你施加的宽度大于按钮真正需要的宽度,你可以看到它)。
  • 您必须手动定义矩形的大小(画笔只填充并且不定义它的大小)否则,您将有一个0px大小的矩形,实际上不存在屏

对于边界问题,您可能想查看此question的操作是什么(此处链接,因为相关文档也已标记)

<强> EDIT2

更改了上面的代码,以便<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Width="525" Height="350"> <Grid> <Button x:Name="btnOpen" HorizontalAlignment="Center" VerticalAlignment="Center" Click=""> <Border x:Name="borderBtnOpen" Background="Transparent" BorderBrush="DarkGray" BorderThickness="1" CornerRadius="10"> <Grid Margin="6" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{DynamicResource AccentColorBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Rectangle Grid.Column="0" Width="20px"> <Rectangle.Fill> <SolidColorBrush Color="Blue"/> </Rectangle.Fill> </Rectangle> <TextBlock Grid.Column="1" Text="bonjour"/> </Grid> </Border> </Button> </Grid> </Window> 足够大时可以看到矩形(您仍然可以参考边框问题的链接问题)