Каков синтаксис XAML для установки триггера на метке? - PullRequest
3 голосов
/ 11 февраля 2009

У меня есть DataTemplate, который отображает объекты с тремя полями, например ::100100

Name = "Font Color"
Value = "Orange"
Editable = "True"

но я хочу отобразить их как, например ::10000

Цвет шрифта: оранжевый, редактируемый

Но у меня возникают проблемы с поиском синтаксиса для использования здесь триггеров, например, для отображать «Editable», когда поле Editable = «True»

Кто-нибудь знает синтаксис для этого?

Следующий код приводит к «Привязка не может быть использована в свойстве»:

<DataTemplate x:Key="settingsItemTemplate">
    <StackPanel Orientation="Horizontal">
        <Label Content="{Binding XPath=Name}" ContentStringFormat=" {0}:"/>
        <Label Content="{Binding XPath=Value}"/>
        <Label>
            <Label.Triggers>
                <Trigger Property="{Binding XPath=Editable}" Value="True">
                    <Setter Property="Content" Value="Editable"/>
                </Trigger>
                <Trigger Property="{Binding XPath=Editable}" Value="False">
                    <Setter Property="Content" Value="NOT Editable"/>
                </Trigger>
            </Label.Triggers>
        </Label>
    </StackPanel>
</DataTemplate>

1 Ответ

10 голосов
/ 11 февраля 2009

Будет ли работать TextBlock вместо Label? TextBlock имеет свойство Text, к которому вы должны быть привязаны в этом случае.

Если вы действительно хотите использовать Label, другой подход заключается в создании двух DataTemplate - один для редактируемого случая, а другой для нередактируемого. Затем вы можете привязать свойство ContentTemplate к соответствующему шаблону.

Обновление : После более подробного изучения, похоже, что Trigger не поддерживает привязку для своего атрибута Property. Однако DataTrigger поддерживает это:

<StackPanel>
    <CheckBox Name="EditableCheckBox">Is Editable</CheckBox>
    <Label>
        <Label.Resources>
            <Style TargetType="{x:Type Label}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=EditableCheckBox, Path=IsChecked}" Value="True">
                        <Setter Property="Content" Value="Editable" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=EditableCheckBox, Path=IsChecked}" Value="False">
                        <Setter Property="Content" Value="NOT Editable" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Label.Resources>
    </Label>
</StackPanel>

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

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