如何在单击时更改矩形的图像

时间:2016-11-20 14:12:27

标签: c# wpf image xaml events

我正在写一个益智游戏,玩家试图逃离房间,但我遇到了一个问题。我正在尝试更改一个名为" door"点击时。但它并没有改变并且给出了运行时错误。

  

未处理的类型' System.Windows.ResourceReferenceKeyNotFoundException'发生在PresentationFramework.dll

C#代码:

private void Rectangle_MouseDown(object sender, MouseButtonEventArgs e)
{           
    ImageBrush ib = new ImageBrush();
    ib.ImageSource = (ImageSource)Resources["openImage"];           
}

XAML代码:

<Window.Resources>
    <BitmapImage x:Key="openImage" UriSource="açık.png" />
    <BitmapImage x:Key="closedImage" UriSource="Kapalı.png" />
</Window.Resources>

<Rectangle x:Name="door" HorizontalAlignment="Left" Height="230" Margin="211,10,0,0"  VerticalAlignment="Top" Width="100" MouseDown="Rectangle_MouseDown">
    <Rectangle.Stroke>
        <ImageBrush Stretch="None"/>
    </Rectangle.Stroke>
    <Rectangle.Fill>
        <ImageBrush ImageSource="{StaticResource closedImage}"/>
    </Rectangle.Fill>
</Rectangle>

1 个答案:

答案 0 :(得分:0)

您没有指定名为Closed.png的资源,只是将该名称的图像文件分配给Image控件的ImageSource属性。

你可能想要的是定义两个这样的BitmapImage资源:

<Window.Resources>
    <BitmapImage x:Key="openImage" UriSource="Open.png" />
    <BitmapImage x:Key="closedImage" UriSource="Closed.png" />
</Window.Resources>

并在像这样的XAML中使用它们

<ImageBrush ImageSource="{StaticResource closedImage}"/>

并在这样的代码中:

var fill = door.Fill as ImageBrush;

if (fill.ImageSource == (ImageSource)Resources["closedImage"])
{
    fill.ImageSource = (ImageSource)Resources["openImage"];
}
相关问题