Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF Triggers

I'm trying to set a trigger to display a block of text when the value i get for the cell is a certain type.

I have successfully managed to display an image in the same situation, but in this circumstance i don't want an image, but some text.

Have commented out lines in order to test.try to make it work. The commented out code works ! The textblock text=xxx inside it, doesn't.

This is my attempts(s)

<wpfToolkit:DataGridTemplateColumn Header="P" Width="20">
    <wpfToolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <!-- <DataTemplate.Triggers> -->
            <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> -->
            <TextBlock Text="XXX" />
            <!-- </DataTrigger> -->
            <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> -->
            <!-- <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> -->
            <!-- </DataTrigger> -->
            <!-- </DataTemplate.Triggers> -->
        </DataTemplate>
    </wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>
like image 500
mike Avatar asked Feb 11 '09 06:02

mike


People also ask

What are the triggers in WPF?

The WPF styling and templating model enables you to specify triggers within your Style. Essentially, triggers are objects that enable you to apply changes when certain conditions (such as when a certain property value becomes true , or when an event occurs) are satisfied.

How many types of triggers are there in WPF?

Basically, there are 3 types of triggers, they are: Property Trigger. Data Trigger. Event Trigger.

Which trigger can be used to notify the data change in WPF?

Data Trigger This trigger is tagged as <DataTrigger> and fires when the data bound with the control is changed.

Where is style defined in WPF?

You can use a style on any element that derives from FrameworkElement or FrameworkContentElement such as a Window or a Button. The most common way to declare a style is as a resource in the Resources section in a XAML file. Because styles are resources, they obey the same scoping rules that apply to all resources.


2 Answers

Set the content of the DataTemplate to the TextBlock and set the visibility based on the trigger. I'm not sure what the second DataTrigger is for because it is referring to a target name that does not exist in the current scope, so I don't know how this fits in.

<DataTemplate>
    <TextBlock x:Name="block" Text="XXX" Visibility="Collapsed"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
            <Setter TargetName="block" Property="Visibility" Value="Visible"/>
        </DataTrigger>
        <!--<DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
            <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/>
        </DataTrigger>-->
    </DataTemplate.Triggers>
</DataTemplate>
like image 143
Josh G Avatar answered Sep 19 '22 17:09

Josh G


Brilliant ! Thanks heaps :)

This is what I ended up with. If PrecedenceIndicator =1, display !, if PrecendenceIndicator =2, display !!.

<wpfToolkit:DataGridTemplateColumn Header="A" Width="20">
    <wpfToolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock x:Name="block1" Text="&#x21;" Visibility="Collapsed"/>
                <TextBlock x:Name="block2" Text="&#x21; &#x21;" Visibility="Collapsed"/>
            </TextBlock>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
                    <Setter TargetName="block1" Property="Visibility" Value="Visible"/>
                </DataTrigger>
               <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
                    <Setter TargetName="block2" Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>
like image 24
mike Avatar answered Sep 17 '22 17:09

mike