2

我正在尝试使用包含艺术品的无缝 ImageButtons 创建一个 WrapPanel。我将以下 ContentTemplate 放在一起,希望它能提供所需的无缝外观;然而,每个按钮周围都有一条细白线。谁能引导我朝着正确的方向前进?

<Button.ContentTemplate>
    <DataTemplate DataType="{x:Type local:ArtInfo}">
        <Border Name="border" BorderThickness="0" BorderBrush="blue" Height="280" Width="250" Background="#262c40">
            <StackPanel>
                <Grid>
                    <Grid.Resources>
                        <local:MyConverter x:Key="MyConverter"></local:MyConverter>
                        <ObjectDataProvider x:Key="Properties.Settings" ObjectType="{x:Type lcl:Properties.Settings}" />
                    </Grid.Resources>
                    <Image Name="ArtImage" Margin="10,15,0,0" Height="195" Width="195" VerticalAlignment="Top" >
                        <Image.Source>
                                  <Binding Path="ArtImage"/>
                        </Image.Source>
                    </Image>
               </Grid>
            <TextBlock Text="{Binding Path=ArtClass}" Margin="10,-17,0,0" FontSize="11" Foreground="white" />
            <TextBlock Text="{Binding Path=Student}" Margin="10,0,0,0" FontSize="11" Foreground="white" />
            <TextBlock Text="1998" Margin="10,0,0,0" FontSize="11" Foreground="white" />
        </StackPanel>
    </Border>
    </DataTemplate>
</Button.ContentTemplate>
4

2 回答 2

3

ContentTemplate 告诉 WPF 如何Button 中显示内容 - Button 镶边(例如边框和背景)仍然存在,模板化的内容显示在该镶边内部和上方。

您想要替换 Button、边框和所有内容的整个外观,而不仅仅是自定义其内容的显示方式。为此,您需要改用 Template 属性。Button.Template 的值是 ControlTemplate 而不是 DataTemplate。在该 ControlTemplate 中,您可以使用 ContentPresenter 来显示“数据模板”内容。

在您的情况下,由于您的 DataTemplate 正在完成所有工作,因此您可以使用原始 ContentPresenter 作为模板:

<Button.Template>
  <ControlTemplate TargetType="Button">
    <ContentPresenter />
  </ControlTemplate>
</Button.Template>

但是,如果您的所有按钮都使用相同的背景,您可以将其移动到 ControlTemplate 中:

<Button.Template>
  <ControlTemplate TargetType="Button">
    <Border BorderBrush="Blue" ...>
      <ContentPresenter />
    </Border>
  </ControlTemplate>
</Button.Template>

然后,您可以从 DataTemplate 中删除边框。仅当您计划将相同的 Button.Template 与其他内容模板重用并希望在不同类型的内容中保持 Button 的外观一致时,这才真正有意义。

于 2010-04-03T20:22:21.700 回答
0

创建一个用户控件,将按钮和图像放在网格中。

<Grid>
  <Image Source="icon.png" Panel.ZIndex="1" />
  <Button 
    Panel.ZIndex="2" 
    FocusVisualStyle="{x:Null}" 
    Background="Transparent"/>
</Grid> 
于 2011-11-02T23:28:49.233 回答