Каков синтаксис привязки значений в 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. Высота, когда я пытаюсь запустить это. Я знаю, что, должно быть, упускаю что-то фундаментальное Так что напишите меня, укладчики, и моя благодарность будет безграничной.


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

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

XamlParseException: Invalid attribute value for property Height.

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

11.08.2008 13:09:08
8 ОТВЕТОВ
РЕШЕНИЕ

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

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

2
12.08.2008 04:33:00
Просто чтобы отметить: это в Silverlight 4. (И 3.5, я думаю)
MojoFilter 25.06.2010 12:40:45

Прежде всего, это вопрос оболочки ...

+ Изменить

Part_Track
в
PART_Track
которая исправит вашу ошибку привязки ..

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

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

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

0
11.08.2008 13:31:50

Между прочим, граница в шаблоне?

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

0
11.08.2008 13:35:27

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

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

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

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

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

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

1
11.08.2008 13:56:55

Хм, в этом вопросе может быть существенная разница между 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

1
10.01.2014 16:01:11
0
11.08.2008 15:17:04

Хорошо, вот сделка:

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

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

1
12.08.2008 12:00:26

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

0
17.02.2010 22:44:50