WPF按钮图像在运行时消失

时间:2015-05-22 21:14:20

标签: xaml

我在下面编写了用户控件,我想在按钮控件上显示时钟图像。该图像的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>

2 个答案:

答案 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应用程序中):

  • 将图像放入项目中的文件夹中
  • 在xaml中创建图像并放入源 对于我来说,图像现在显示在设计窗口中,而不是在运行时显示。
  • 使用解决方案资源管理器访问项目中的图像
  • 选择每个图像并打开属性窗口
  • 将“生成操作”设置为“资源”,将“在存储库中复制”设置为“始终复制”

我已经做到了,我可以在运行时看到图像:)

PS:对不起,我的英语,我是法语