Динамический StringFormat в WPF - PullRequest
1 голос
/ 01 апреля 2012

У меня есть следующий стиль TextBlock:

    <Style TargetType="TextBlock" x:Key="MyValues">
    <Setter Property="FontStyle" Value="Italic"/>
    <Setter Property="Foreground" Value="DarkBlue"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsMetric}" Value="True">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="F1">

                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsMetric}" Value="False">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="F3">

                    </MultiBinding>
                </Setter.Value>
            </Setter>
            <Setter Property="Foreground" Value="Green"/>
        </DataTrigger>
    </Style.Triggers>

Затем я использую TextBlocks следующим образом:

<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Breadth}" Style="{StaticResource MyValues}"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Depth}" Style="{StaticResource MyValues}"/>
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Path=Area}" Style="{StaticResource MyValues}" />

Цель состоит в том, чтобы установить StringFormat в зависимости от связанного свойства IsMetric.Связывание в стиле оставлено пустым, потому что я хочу применить один и тот же стиль для нескольких TextBlocks, привязанных к разным свойствам.Триггеры работают, но StringFormat` игнорируется, есть идеи?

1 Ответ

2 голосов
/ 02 апреля 2012

Здесь вы устанавливаете свойство Text как разные вещи в объявлении TextBlock и в DataTriggers.В первом случае это экземпляр класса Binding.Во втором случае это экземпляр класса MultiBinding.Наконец это один из них.В данный момент это не может быть так.

Следующая разметка

<Setter Property="Text">
    <Setter.Value>
        <MultiBinding StringFormat="F1">

        </MultiBinding>
    </Setter.Value>
</Setter>

создает экземпляр класса MultiBinding и устанавливает его в Text свойство.

Text="{Binding Path=Breadth}" создает экземпляр класса Binding и устанавливает для него свойство Text.

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