Доступ к установщикам стилей в коде - PullRequest
3 голосов
/ 16 сентября 2011

Я пытаюсь реализовать масштабирование по пинчу / растяжению в ListBox:

<ListBox
   Grid.Row="1"
   ManipulationCompleted="ListBox_ManipulationCompleted"
   ItemsSource="{Binding Paras}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <TextBlock
         DataContext="{Binding}"
         TextWrapping="Wrap"
         Text="{Binding Text}"
         FontSize="{Binding FontSize}">
       </TextBlock>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

Что я действительно хочу сделать, так это связать RenderTransform со свойством Zoom моей ViewModel, но это не разрешено.Я могу привязать к FontSize, и он корректно меняет FontSize, но мне нужно жестко закодировать это в моем коде.Что я действительно хочу сделать, так это соблюдать настройки FontSize, установленные дизайнером, и применять равномерное масштабирование для всех размеров шрифта.Так что в моем коде позади:

Style style = App.Current.Resources[_XElement.Name.LocalName] as Style;
if ( style != null )
{
  foreach ( var s in style.Setters )
  {
    Setter setter = s as Setter;
    if ( setter != null )
    {
        Debug.WriteLine(setter.Property + "=" + setter.Value);
    }
  }
}

Я не могу получить доступ к setter.Property.Name (ошибка времени компиляции), хотя я вижу, что FontSize находится в отладчике.И значение всегда «Не удалось оценить выражение» - выводится как пустое.

Есть какие-либо подсказки, либо о том, что здесь происходит, либо лучший способ сделать это?

Эндрю

1 Ответ

0 голосов
/ 16 сентября 2011

Вы не можете получить доступ к Name, потому что реализация Silverlight DependencyProperty не раскрывает имя public.Чтобы получить сеттеры, которые устанавливают свойство FontSize, вам нужно использовать небольшое отражение, чтобы выбрать из Style.TargetType статическое поле с именем «FontSizeProperty» и извлечь его значение.Затем сравните каждый установщик Property с этим значением, если у вас есть соответствие, то вы нашли ответственного за установщик FontSize.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...