我在下面编写了用户控件,我想在按钮控件上显示时钟图像。该图像的BuildAction设置为Resource。它在XAML设计屏幕中显示完美,但是当我运行应用程序时,按钮是空白的。我做错了什么?
<UserControl x:Class="App_Process_Admin.User_Controls.TimePicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="150">
<UserControl.Resources>
<ResourceDictionary>
<Image x:Key="ClockImage" Source="Icons/Clock.png"/>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="180" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60*" />
<ColumnDefinition Width="20*" />
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Name="TimeField" Text="" />
<Button Grid.Row="0" Grid.Column="1" Content="{StaticResource ClockImage}" Click="SetTime_Click" />
<local:ClockPopUp x:Name="ClockPopUp1" Grid.Row="1" Grid.Column="0" Visibility="Hidden"></local:ClockPopUp>
</Grid>
</UserControl>
答案 0 :(得分:1)
Image
是一个控件。如果你按照他的方式将它添加到资源中,它将仅显示在它添加到的最后一个位置,并将从之前的所有位置消失。您可以通过添加x:Shared=False
:
<Image x:Key="ClockImage" x:Shared="False" Source="Icons/Clock.png"/>
这样,每次请求时都会创建一个新的Image
控件。
或者,您可以在其Image
中创建一个包含ContentTemplate
的按钮样式,并直接向资源添加BitmapImage
:
<BitmapImage x:Key="Bitmap" UriSource="Icons/Clock.png"/>
<Style x:Key="ButtonImage" TargetType="Button">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image Source="{TemplateBinding Content}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
现在你可以用这种方式创建带图像的按钮:
<Button Content="{StaticResource Bitmap}" Style="{StaticResource ButtonImage}"/>
Image
控件将由框架基于模板创建。
答案 1 :(得分:0)
我遇到了同样的问题,我以这种方式解决了这个问题(在Visual Studio 2019中,wpf应用程序中):
我已经做到了,我可以在运行时看到图像:)
PS:对不起,我的英语,我是法语