我有一个按钮,它的样式在里面显示图像。我希望能够使用按钮上的Content
属性(或其他方法)指定它使用的图像。
如何才能做到这一点,而实际上嵌套的图像直接在按钮。
<BitmapImage x:Key="closeImage" UriSource="close.png" />
我想我也许可以这样指定图像文件名:
<Button Content="{{StaticResource closeImage}" x:Name="closeButton" Click="closeButton_Click" Style="{DynamicResource WindowToolboxButton}"/>
款式:
<Style x:Key="WindowToolboxButton" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
<Setter Property="Background" Value="{StaticResource ButtonNormalBackgroundFill}"/>
<Setter Property="BorderBrush" Value="{StaticResource ButtonBorder}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="grid" Height="15" Width="15">
<Border x:Name="border" CornerRadius="2,2,2,2" BorderBrush="#FFBBCDD2" BorderThickness="1" Opacity="0" Margin="0">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF82A3AC" Offset="1"/>
<GradientStop Color="#7FCDD9DC"/>
</LinearGradientBrush>
</Border.Background>
</Border>
<Image x:Name="image" Source="close.png" Stretch="None" VerticalAlignment="Center" HorizontalAlignment="Center" >
</Image>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
4条答案
按热度按时间wnavrhmk1#
我很确定我没有理解你的问题,但是下面的代码对我很有效:
另外我在你的代码里发现了一个错误
应为:
我不太明白您的样式在做什么。当您想通过样式指定图像时,为什么要将Content属性设置为StaticResource?
编辑:
好吧,我试过你的风格,它也适合我。
图像显示出来了。但是,我看不到你的边框,因为不透明度属性设置为0。
直接在按钮上提供的内容会被样式覆盖。
也许你的图片有什么问题?你把它的build-property设置成Resource了吗?
f87krz0w2#
我认为正确的做法是
1.创建从Button派生的新自定义控件ImageButton
1.在ImageButton中创建类型为“ImageSource”的DP“ImageSource”,并以其样式将图像源绑定到此DP。
然后可以像
<ImageButton ImageSource={StaticResource ...}/>
一样使用它如果尝试将资源中定义的图像添加到内容控件,则仅在第一次时有效。第二次尝试将同一图像添加到另一个内容控件时,将失败,并显示“指定的视觉对象已经是另一个视觉对象的子级...”
4si2a6ki3#
实际上,这很简单。使用你已有的样式,在“image”中添加以下内容
然后(只要您将图像设置为Content/Copy if renewater),就可以使用所需图像的URI设置Content。
注意:用你的项目名替换'[projectname]'并用图像路径替换'...'
n6lpvg4x4#
替换
与
这里的祖先类型是在xaml中调用的那个按钮,在这里你可以设置那个按钮的内容来指向某个图像.
示例: