Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > проблема с DataTrigger


Автор: namespace 14.11.2008, 16:41
ниже приведённый код работает 
Код

                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                    <TextBlock x:Name="textBlock" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}"/>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding ElementName=textBlock, Path=Text}" Value="l">
                            <Setter TargetName="textBlock" Property="Background" Value="Blue" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=textBlock, Path=Text}" Value="r">
                            <Setter TargetName="textBlock" Property="Background" Value="Red" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=textBlock, Path=Text}" Value="n">
                            <Setter TargetName="textBlock" Property="Background" Value="Yellow" />
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>

но мне надо менять свойство Text и когда я запускаю такой код:
Код

                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                    <TextBlock x:Name="textBlock" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}"/>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding ElementName=textBlock, Path=Text}" Value="l">
                            <Setter TargetName="textBlock" Property="Text" Value="апав" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=textBlock, Path=Text}" Value="r">
                            <Setter TargetName="textBlock" Property="Text" Value="куецкуне" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding ElementName=textBlock, Path=Text}" Value="n">
                            <Setter TargetName="textBlock" Property="Text" Value="вапвапва" />
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>

выпадает непонятное исключение:
Цитата

An unhandled exception of type 'System.StackOverflowException' occurred in WindowsBase.dll

?

P.S. вообще задача заменить коды из таблицы, на понятные пользователю значения, т. к. значений фиксированное кол-во (всего 3) смысла делать еще одну таблицу код-название нет. Может быть есть другие варианты как в xaml выводить на экран расчитываемые значения столбцов?

Автор: Partizan 14.11.2008, 17:06
namespace,  скорее всего где-то получается бесконечная рекурсия....

Автор: namespace 14.11.2008, 20:28
в принципе она бы возникала, если бы я значение менял на то на которое должен сработать тригер и опять его заменить, но тут нет такого
может быть некоректно применять тригер для смены свойства которое также находится и в условии?

Автор: Partizan 14.11.2008, 20:52
namespace, может к какому-нибудь другому свойству попробовать привязаться? =) 

Автор: namespace 17.11.2008, 00:33
 smile можно по эксплуатировать свойство Tag, оно вроде как раз и предназначается для пользовательских нужд...
Код

                <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                    <TextBlock x:Name="textBlock" Tag="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}"/>
                    <ControlTemplate.Triggers>
                        <Trigger SourceName="textBlock" Property="Tag" Value="l">
                            <Setter TargetName="textBlock" Property="Text" Value="апав" />
                        </Trigger>
                        <Trigger SourceName="textBlock" Property="Tag" Value="r">
                            <Setter TargetName="textBlock" Property="Text" Value="куецкуне" />
                        </Trigger>
                        <Trigger SourceName="textBlock" Property="Tag" Value="n">
                            <Setter TargetName="textBlock" Property="Text" Value="вапвапва" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>


Автор: namespace 17.11.2008, 02:02
но есть одна проблема сортировка, группировка и т.п. работают по значению объекта, а не свойства...
так что проще в SQL запросе все заменить и не парится smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)