1

我不明白为什么不显示图像。我想要一种样式的不同按钮图像。我尝试将按钮图像设置为按钮样式的图像刷,但是我将在所有按钮上只有一张图片。

<Button
    Height="64" Width="64" Margin="0,0,50,50"
    Style="{DynamicResource MyButtonStyle}" VerticalAlignment="Bottom"
    HorizontalAlignment="Right">
    <Image Source="image1.png"/>
</Button>
<Button
    Height="64" Width="64" Margin="0,0,125,50"
    Style="{DynamicResource MyButtonStyle}" VerticalAlignment="Bottom" 
    HorizontalAlignment="Right">
    <Image Source="image2.png"/>
</Button>

按钮样式

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Rectangle x:Name="rectangle" Stroke="Black" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Opacity" TargetName="rectangle" Value="0.8"/>
                        <Setter Property="Stroke" TargetName="rectangle" Value="#FF478CFB"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="OpacityMask" TargetName="rectangle" Value="{x:Null}"/>
                        <Setter Property="Effect" TargetName="rectangle">
                            <Setter.Value>
                                <BlurEffect/>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
4

1 回答 1

0

你的风格不见了ContentPresenter。因此,当您将图像设置为ContentaButton时,在使用您的 Style 时它实际上无处可放ControlTemplate

所以是这样的:

注意-我已将您更改Grid为 a Border,因此摆脱了Rectangle嵌入的内部并添加ContentPresenterBorder

<Style x:Key="MyButtonStyle"
        TargetType="{x:Type Button}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Border x:Name="rectangle">
          <ContentPresenter />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsMouseOver"
                    Value="True">
            <Setter TargetName="rectangle"
                    Property="Opacity"
                    Value="0.8" />
            <Setter TargetName="rectangle"
                    Property="BorderBrush"
                    Value="#FF478CFB" />
          </Trigger>
          <Trigger Property="IsPressed"
                    Value="True">
            <Setter TargetName="rectangle"
                    Property="OpacityMask"
                    Value="{x:Null}" />
            <Setter TargetName="rectangle"
                    Property="Effect">
              <Setter.Value>
                <BlurEffect />
              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

用法:

和你一样——

<Button
    Height="64" Width="64" Margin="0,0,125,50"
    Style="{DynamicResource MyButtonStyle}" VerticalAlignment="Bottom" 
    HorizontalAlignment="Right">
    <Image Source="image2.png"/>
</Button>
于 2013-04-17T14:27:00.783 回答