Установить содержимое метки WPF на основе значения свойства зависимости bool - PullRequest
2 голосов
/ 28 декабря 2011

У меня есть ярлык в пользовательском элементе управления WPF:

<Label Name="lblTitle"></Label>

В этом коде я определяю свойство зависимости, которое называется Customer. У самого клиента есть свойство под названием IsNew. Я хотел бы связать lblTitle.Content, чтобы при IsNew == true было бы «Создать новый», а когда false, тогда для Content было бы установлено «Обновление» (я бы сделал это в ASP. нетто путем установки lblTitle.Text = IsNew ? "Create New" : "Update";).

Каков наилучший способ сделать это?

Редактировать

Вот мое объявление свойства в коде:

public Cust Customer{
    get { return (Cust)GetValue(CustomerProperty); }
    set { SetValue(CustomerProperty, value); }
}

public static readonly DependencyProperty CustomerProperty =
    DependencyProperty.Register("Customer", typeof(Cust), typeof(Name_Of_Control), new UIPropertyMetadata(new Cust()));

Ответы [ 3 ]

3 голосов
/ 25 января 2017

Это должно помочь вам

<Label Name="lblTitle">
    <Label.Style>    
        <Style TargetType="{x:Type Label}">
            <Setter Property="Label.Content" Value="Update" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Customer.IsNew}" Value="True">
                    <Setter Property="Label.Content" Value="Create New" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    <Label.Style>
</Label>

Кроме того, если вы хотите применить стиль из своих ресурсов, вы можете использовать атрибут BasedOn:

<Style BasedOn="{StaticResource MyLabelStyleName}" TargetType="{x:Type Label}">

С этим вы сможете установить новое значение контента на основе свойства Customer.IsNew, а также стиля для элемента управления Label.

0 голосов
/ 28 декабря 2011

Еще одна вещь, на которую стоит обратить внимание: если ваша метка просто отображает текст, вам лучше использовать TextBlock, а не метку:

http://joshsmithonwpf.wordpress.com/2007/07/04/differences-between-label-and-textblock/

0 голосов
/ 28 декабря 2011

Попробуйте это.

<Label Name="lblTitle">
    <Label.Style TargetType="Label">
        <Setter Property="Content" Value="Update" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Customer.IsNew}" Value="True">
                <Setter Property="Content" Value="Create New" />
            </DataTrigger>
        </Style.Triggers>
    </Label.Style>
</Label>
...