Каков синтаксис привязки значений в xaml?

Я все узнал о привязке в WPF. Однако у меня много проблем с отладкой ошибок синтаксического анализа в моем xaml. Может кто-нибудь милый, пожалуйста, скажите мне, что не так с этой маленькой штукой? :

<Border Name = "TrackBackground"
    Margin = "0"
    CornerRadius = "2"                     
    Grid.Row = "1"
    Grid.Column = "1"
    Background = "BlanchedAlmond"
    BorderThickness = "1"
    Height = "{TemplateBinding Height}">

    <Canvas Name = "PART_Track" Background = "DarkSalmon" Grid.Row = "1" Grid.Column = "1">
        <Thumb Name = "ThumbKnob" Height = "{Binding ElementName=Part_Track, Path=Height, Mode=OneWay}" />
    </Canvas>
</Border>

Нарушается привязка данных. Когда я пытаюсь запустить это, я получаю исключение InvalidAttributeValue для ThumbKnob.Height. Я знаю, что мне не хватает чего-то фундаментального. Так что наполняйте меня, укладчики, и моя благодарность будет безграничной.


Изменение ElementName не помогло. Должно быть, я еще чего-то не понимаю.

Я должен упомянуть, что тестирую это в Silverlight. Точное сообщение, которое я получаю из Internet Explorer:

XamlParseException: Invalid attribute value for property Height.

Все это находится внутри ControlTemplate. Я делаю ползунок, просто чтобы научиться концепциям.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
4 229
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Прежде всего, дело в корпусе ...

Изменять

Part_Track
to
PART_Track
which will fix your binding error..

Но я не думаю, что это то, что вы пытаетесь сделать ..

Вы можете использовать сетку вместо холста, и размер большого пальца изменится автоматически. У Canvas на самом деле нет высоты, потому что он не заботится о высоте своих дочерних элементов ...

Надеюсь это поможет...

Кстати, граница в шаблоне?

Поскольку нет необходимости в TemplateBinding, если граница не находится в шаблоне (ControlTemplate или DataTemplate)

Что я обычно делаю для отладки привязок данных, так это добавляю конвертер, в котором я могу установить точку останова в VS.NET ..

поэтому привязка будет примерно такой:

{Binding ElementName=PART_Track, Path=Height, Mode=OneWay, Converter = {StaticResources DebugConverter}}

Тогда преобразователь может быть пустой реализацией IValueConverter, установить точку останова в методе Convert и посмотреть, какая высота устанавливается на ...

Не забудьте добавить конвертер в свои ресурсы ...

Возможно, значение NaN?

Хм, здесь может быть существенная разница между WPF и Silverlight.

Кажется, у меня нет проблем, так что даже скомпилируйте и запустите этот образец в окне WPF:

<Slider Width = "400" Height = "20">
    <Slider.Template>
        <ControlTemplate>
            <Border Name = "TrackBackground"
                Margin = "0"
                CornerRadius = "2"                     
                Grid.Row = "1"
                Grid.Column = "1"
                Background = "BlanchedAlmond"
                BorderThickness = "1">

                <Canvas x:Name = "PART_Track" Background = "DarkSalmon" Grid.Row = "1" Grid.Column = "1">
                    <Thumb Name = "ThumbKnob" Height = "{Binding ElementName=PART_Track, Path=Height, Mode=OneWay}" />
                </Canvas>
            </Border>
        </ControlTemplate>
    </Slider.Template>
</Slider>

Возможно, Silverlight имеет меньше свойств в классе Thumb ...

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb.aspx

Ответ принят как подходящий

Свойство ElementName для привязки не поддерживается в Silverlight.

Вы заметите, что если вы войдете в код или проверите объект Binding в проводнике классов, у него нет свойства с именем ElementName.

На заметку: он есть в Silverlight 4. (и 3.5, я думаю)

MojoFilter 25.06.2010 16:40

Хорошо, вот в чем дело:

В silverlight вы не можете декларативно привязать значения из одного элемента пользовательского интерфейса к другому. Единственный способ сделать то, что я пытался здесь сделать, - это использовать код C#.

Вчера у меня была ссылка на это, но теперь, думаю, вам просто нужно поверить мне на слово :)

Silverlight 3 теперь включает привязку ElementName ...

Другие вопросы по теме