2012-05-14 3 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); 
     } 
    } 

Как изменить компонент.Dispatcher.Invoke ???

+0

В чем проблема? – Jon

+0

Это не должно быть 'ref'. – SLaks

+0

Зачем нужна ссылка? – Tilak

ответ

1

Прохождение элементов управления пользовательского интерфейса вокруг - это почти плохая идея, которую я бы сказал.

Почему бы не настроить логика немного, так что вы можете с помощью Binding на ваш взгляд (я понимаю, что вы используете WPF, как грузоотправитель участвует)

так, что ваш ViewModel выставит команду RecalculateFontSize, а затем Ваше мнение привязанный к свойству «Размер шрифта», которое ViewModel может изменять на основе запроса.

Таким образом, в вашей команде вы можете проверить доступ через Dispatcher.CheckAccess и вызывать пересчет FontSize в потоке пользовательского интерфейса.

0

Вы не можете использовать параметр ref или out в теле анонимного метода.

0

Ok, thx. Но есть еще одна идея сделать это. Можно просто использовать что-то вроде этого:

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

Работает отлично.

Другой способ - создать ресурс ObjectDataProvider и связать с ним наш TextBlock. Дополнительная информация: http://msdn.microsoft.com/en-us/library/aa348824.aspx

Смежные вопросы