题
我试图用包含艺术品的无缝图像布丁创建一个包裹。我将以下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>
解决方案
ContentTemplate告诉WPF如何显示内容 内 按钮 - 按钮镀铬(例如边框和背景)保留,并且模板内容在该镀铬内部及以上显示。
您想更换 全部的 按钮,边框和所有内容的外观,而不仅仅是自定义其内容的显示方式。为此,您需要使用模板属性。按钮的值。模板是一个ControlTemplate,而不是DataTemplate。在该ControlTemplate中,您可以使用ContentPresenter显示“数据模拟”内容。
在您的情况下,由于您的DataTemplate正在完成所有工作,因此您可以将RAW 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上删除边框。这实际上只有您打算重复使用相同的按钮。使用其他内容模板进行修改,并希望保持按钮在不同类型的内容中保持一致的外观。
其他提示
创建一个UserControl,将Botton&Image放入网格中。
<Grid>
<Image Source="icon.png" Panel.ZIndex="1" />
<Button
Panel.ZIndex="2"
FocusVisualStyle="{x:Null}"
Background="Transparent"/>
</Grid>
不隶属于 StackOverflow