2012-05-14 29 views
1

我遇到问题。我需要使用的通过一个参数(对于对照参考)功能:C# - 组件参考 - Dispacher.CheckAccess()

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

我想使用它,但不知道如何调度员“裁判”关键字连接: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 ???

+0

问题是什么? – Jon

+0

这不应该是'ref'。 – SLaks

+0

为什么需要ref? – Tilak

回答

1

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

为什么不调整的逻辑一下,让你可以在你查看使用绑定(我想你正在使用WPF作为调度员参与)

,使您的视图模型将暴露RecalculateFontSize命令,然后你的视图是绑定到ViewModel可以根据请求更改的Font Size属性。

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

0

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

0

好的,thx。但有另一个想法来做到这一点。 人们可以简单地使用这样的事情:

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

伟大的作品。

另一种方法是创建ObjectDataProvider资源并将TextBlock绑定到它。 Here's more info:http://msdn.microsoft.com/en-us/library/aa348824.aspx