2

我有个问题。我需要使用传递一个参数的函数(对控件的引用):

public void recalculateFontSize(ref TextBlock component)
{
...
}

我想用它,但不知道如何用“ref”关键字连接 Dispatcher:S

    private void textResizer(ref TextBlock component)
    {
        if (component.Dispatcher.CheckAccess())
        {
            textUtils.recalculateFontSize(ref component);
        }
        else
        {
            component.Dispatcher.Invoke(new Action<TextBlock>(textResizer), component);
        }
    }

如何修改component.Dispatcher.Invoke ???

4

3 回答 3

1

我会说,传递 UI 控件总是几乎是个坏主意。

为什么不稍微调整一下逻辑,以便您可以在视图中使用绑定(我认为您使用的是 WPF,因为涉及到 Dispatcher)

这样您的 ViewModel 将公开 RecalculateFontSize 命令,然后您的 View 绑定到一个 Font Size 属性,ViewModel 可以根据每个请求更改该属性。

这样,在您的命令中,您可以通过 Dispatcher.CheckAccess 检查访问并在 UI 线程中调用 FontSize 的重新计算。

于 2012-05-14T15:01:00.477 回答
0

您不能在匿名方法主体中使用 ref 或 out 参数。

于 2012-05-14T15:03:06.793 回答
0

好的,谢谢。但是还有另一个想法可以做到这一点。可以简单地使用这样的东西:

<Viewbox>
   <TextBlock Text="Bla bla bla" TextWrapping="Wrap" />
</Viewbox>

效果很好。

另一种方法是创建 ObjectDataProvider 资源并将我们的 TextBlock 绑定到它。这里有更多信息:http: //msdn.microsoft.com/en-us/library/aa348824.aspx

于 2012-05-15T12:33:09.230 回答