【问题标题】:How to change the image of a rectangle when clicked on it单击矩形时如何更改矩形的图像
【发布时间】:2016-11-20 14:12:26
【问题描述】:

我正在编写一个益智游戏,玩家试图逃离房间,但我遇到了问题。我试图在单击时更改名为“门”的矩形的图像。但它不会改变并给出运行时错误。

PresentationFramework.dll 中出现“System.Windows.ResourceReferenceKeyNotFoundException”类型的未处理异常

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>

【问题讨论】:

    标签: c# wpf image xaml events


    【解决方案1】:

    您没有指定名为 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"];
    }
    

    【讨论】:

    • 我说了你说的,但是没有用。我做错了什么?我编辑了上面的代码。
    • 您没有将新的 ImageBrush 分配给 Rectangle 的 Fill 属性。您可以重复使用 ImageBrush 并重新分配 ImageSource 属性,如编辑后的答案所示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多