我正在尝试构建一个基于<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="MAIN/*/*">
<xsl:copy>
<xsl:call-template name="proc_node"/>
</xsl:copy>
</xsl:template>
<xsl:template name="proc_node">
<xsl:variable name="thisName" select="name()"/>
<xsl:variable name="cnt" select="string-length(.)"/>
<xsl:if test="$cnt > 0">
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="$cnt = 0">
<xsl:variable name="prevBucket" select="../preceding-sibling::*[1]"/>
<xsl:variable name="prevElem" select="$prevBucket/*[name()=$thisName]"/>
<xsl:variable name="cnt" select="string-length($prevElem)"/>
<xsl:if test="$cnt > 0">
<xsl:value-of select="$prevElem"/>
</xsl:if>
<xsl:if test="$cnt = 0">ABCD</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
</xsl:transform>
的自定义控件,它只是使图像在计时器上重新加载(来自相同的URI)。原始图像显示正常,但似乎没有刷新。
这是自定义控件:
Image
我正在使用它:
public class RefreshImage : Image
{
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
this.Loaded += RefreshImage_Loaded;
}
private void RefreshImage_Loaded(object sender, RoutedEventArgs e)
{
var timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += RefreshImage_Tick;
timer.Start();
}
private void RefreshImage_Tick(object sender, System.EventArgs e)
{
var bm = (BitmapImage) Source;
bm.InvalidateProperty(BitmapImage.UriSourceProperty);
}
}
InvalidateProperty的文档似乎表明它正是我需要的:
您还可以使用InvalidateProperty强制重新评估a 绑定无法实现的数据源 建议使用INotifyPropertyChanged通知机制。
在 <custom:RefreshImage>
<Image.Source>
<BitmapImage UriCachePolicy="NoCacheNoStore"
CreateOptions="IgnoreImageCache" CacheOption="None"
UriSource="{Binding Uri}"/>
</Image.Source>
</custom:RefreshImage>
上举起INotifiyPropertyChanged.PropertyChanged
事件也不会触发图像重新加载。
答案 0 :(得分:0)
似乎BitmapSource
通常是不可变对象。完成初始化后,将忽略任何进一步的属性更改。我怀疑这包括UriSource
。
以下阶段经常在此MSDN post on creating custom ImageSources
中重复:
ISupportInitialize接口用于捕捉的值 初始化完成时的属性。进一步改变了 属性被忽略。