трудности с пониманием и использованием расширений разметки xaml - PullRequest
2 голосов
/ 14 октября 2011

Я изучаю концепции WPF, такие как привязка данных, команды, ресурсы, привязки элементов, стили и т. Д., Которые широко используют расширения разметки, и у меня возникают проблемы с пониманием смысла классов Markup, поскольку они используются в настоящее время.используется за то, что я понимаю, они должны быть использованы для.Итак, вот несколько моментов, которые мне нужно прояснить: (все фрагменты кода взяты из Pro WPF в книге C # 2010)

  1. Что означает и использует расширение Static?Его можно использовать для объявления статических ресурсов, которые могут быть объявлены как, но этот xaml смущает меня:

    <Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" >
    

    In {x: Static SystemColors.ActiveCaptionBrush} , какова роль статики здесь и что изменится, если я здесь использую x: Dynamic?В книге говорится, что этот xaml эквивалентен следующему коду:

    cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;

    Это означает, что если у меня есть класс со статическими свойствами, то ядолжно быть в состоянии использовать что-то вроде этого:

    <Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" >
    

    Но это не сработало, несмотря на то, что я создал класс, я попытался использовать local: Static (ссылаясь на локальное пространство имен) но VisualStudio не позволил мне его использовать.Каков правильный метод достижения этого?

  2. Что означает смысл связывания (помимо очевидного смысла, что происходит, когда я связываюсь)?Он используется для привязки ресурса или привязки данных или элемента.Я смог понять привязку элементов, но связывание с объектами, которые не являются элементами, вызвало проблемы.Например:

    <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},
    Path=Source}"></TextBlock>
    

    Здесь это привязка к тексту со свойством SystemFonts.IconFontFamily, что в этом случае использует x: static, и как связать его со свойством в классе, которыйЯ создал?Также, как обновить свойство text текстового поля, если значение цели привязки изменяется?Из-за привязки, он должен обновляться сам по себе, это так?

    Все примеры в книге используют SystemFonts.IconFontFamily, ни один из тех, что я видел, не объясняет использование такой привязки и как это сделатьэто для классов, которые я создаю?Некоторая помощь в этом отношении необходима.Я хочу спросить больше о связывании, но я сделаю это в отдельном вопросе только о связывании.

  3. Наконец, порекомендуйте книгу или ресурс, который объясняет, что происходит, а не какделать то и это?

1 Ответ

3 голосов
/ 14 октября 2011

Ответы ....

1)

Вы сказали ...


... Это означает, что если у меня есть класссо статическими свойствами я мог бы использовать что-то вроде этого:

   <Button ... Foreground="{x:Static MyClass.SomeStaticProperty}" >

Но это не сработало, несмотря на то, что я создал класс, я попытался использовать local: Static (ссылаясь на локальное пространство имен), но VisualStudio не позволил мне его использовать.Каков правильный способ достижения этого?


Что ж, ваша пробная попытка была правильной, но неверно, к какому сроку вы применили этот маркер пространства имен к .... local маркер пространства именотносится к классу, который объявлен под ним так ...

   <Button ... Foreground="{x:Static local:MyClass.SomeStaticProperty}" >

Должно работать нормально, если SomeStaticProperty является допустимым Brush.

В этом примере, весьвнутренняя разметка была эквивалентна Binding как ...

   Binding.Source = {x:Type local:MyClass}
   Binding.Path = SomeStaticProperty.

2)

У вас был пример ...


   <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},     
                             Path=Source}">
   </TextBlock>  

Так что используйте ту же эквивалентность из примера 1 и примените ее к этому примеру ...

    <TextBlock Text="{Binding Source={x:Type SystemFonts},     
                              Path=IconFontFamily.Source}">
    </TextBlock>  

3)

Я узнал всю эту вещь из MSDN ..Я не думаю, что у нас может быть какой-либо другой законный источник, кроме этого.

...