uno平台:在UserControl中,我如何使无效以引起绘制动作



在Uno中,我有一个带有一些属性设置器的UserControl。当setter被调用时,我需要使控件被绘制,即无效。什么方法可以做到呢?

我已经尝试过Invalidate (true),它应该适用于UWP,但不被Uno识别。我也试过InvalidateSurface (),也不识别。

我用的是画图工具。

这是我的控件的xaml:

<UserControl
x:Class="UnoTest.Shared.Controls.ExpandableImage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UnoTest.Shared.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:skia="using:SkiaSharp.Views.UWP"
>
<skia:SKXamlCanvas PaintSurface="OnPaintSurface" />

</UserControl>

下面是c#代码的一些片段:

using SkiaSharp;
using SkiaSharp.Views.UWP;
using System.IO;
using System.Reflection;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace UnoTest.Shared.Controls
{
public sealed partial class ExpandableImage : UserControl
{
...
public string Source
{
get { return (string)GetValue(SourceProperty); }
set 
{ 
SetValue(SourceProperty, value);
// invalidate here
}
}
...
private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
}
}
}

SKXamlCanvas不会使自己无效,除非它的大小或屏幕的DPI改变。

要强制无效,您需要为画布指定一个名称:

<skia:SKXamlCanvas x:Name="canvas" PaintSurface="OnPaintSurface" />

然后使其无效:

public string Source
{
get => (string)GetValue(SourceProperty);
set 
{ 
SetValue(SourceProperty, value);
canvas.Invalidate();
}
}

你可以在这里查看源代码。

相关内容

  • 没有找到相关文章

最新更新