[Silverlight] Interaction.Trigger lijkt niet te werken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dark Blue
  • Registratie: Februari 2001
  • Laatst online: 05-09 10:36

Dark Blue

Compositionista!

Alpenmeisje

Topicstarter
Ik heb het volgende stukje xaml, dat mij een Label laat zien.
Achter al onze Labels hebben we een dubbele punt staan, maar het wil ook wel gebeuren dat we een Label gebruiken als leeg blok, opdat de uitlijning van een form goed verloopt.

Nu moet bij een leeg label wel de dubbele punt wegblijven!
Dat heb ik geprobeerd met onderstaande code:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <Style TargetType="namespace:CustomLabel">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <StackPanel Orientation="Horizontal" MinWidth="250" VerticalAlignment="Top" Margin="0,0,0,16">
                        <ContentPresenter x:Name="MyLabel"/>
                        <TextBlock x:Name="Colon" Text=":" Visibility="Visible">
                        <i:Interaction.Triggers>
                            <ia:DataTrigger Binding="{Binding MyLabel}" Value="{x:Null}">
                                <ia:ChangePropertyAction TargetObject="{Binding Colon}" PropertyName="Visibility" Value="Collapsed"/>
                            </ia:DataTrigger>
                        </i:Interaction.Triggers>
                        </TextBlock>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


Disclaimer:
namespace:CustomLabel mag je even vergeten...
MyLabel heet ook eigenlijk anders, even werktitel project eruit gehaald

Alle namespaces kloppen; daar kan het niet aan liggen.
De Interaction.Triggers zijn nog nieuw voor mij. Voorheen werkte ik met WPF, daar heb ik ook een mooi dik boek van liggen, en daar kon je met DataTriggers precies doen wat ik wilde; en dan werd het ook netjes voorgekauwd. Met Silverlight blijkt dat wat moeilijker. Misschien gebruik ik wel de verkeerde soort trigger hier: ik weet het niet.

Zou misschien de value van MyLabel nooit echt Null worden?
Moet ik de Comparison="" ook nog gebruiken? Die had ik, en dan op 'Equals' gezet, maar dat hielp niks.
De code wordt wel uitgevoerd, want als ik er een foutje in maakt, knalt de applicatie er gelijk op :+

heidiulrich.nl | adventura.nl : rugzakavonturen | pathwise.nl : prepping geeks to get jobs


Acties:
  • 0 Henk 'm!

  • hgp
  • Registratie: Juni 2008
  • Laatst online: 11-09 00:56

hgp

Volgens mij bij je nu aan het kijken of de ContentPresenter Null is of "" en je wil weten of de content van je Label leeg is. Misschien werkt het wel als je in je DataTrigger TemplateBinding gebruikt. Daarmee kan je als het goed is binden aan een property van de control waarvan je de template aanpast.

Dus dan krijg je zoiets:
XML:
1
<ia:DataTrigger Binding="{TemplateBinding Content}">


(Ik heb dit niet getest maar dit is wat ik zie als ik Blend een copy van de template van een control laat maken)

Acties:
  • 0 Henk 'm!

  • Dark Blue
  • Registratie: Februari 2001
  • Laatst online: 05-09 10:36

Dark Blue

Compositionista!

Alpenmeisje

Topicstarter
Helaas, ja, hij leek plausibel. Als ik hem probeer knalt de applicatie at runtime eruit met deze foutmelding:
Regel: 59
Fout: Unhandled Error in Silverlight Application
Code: 2500
Category: ParserError
Message: The property 'Content' was not found in type 'System.Windows.Controls.Control'.
File:
Line: 255
Position: 53
Gezien de foutmelding leek hij 'Control' (de mother of all) te checken op Content. Dat heeft Control niet; maar <namespace:CustomLabel> wel.

Hence:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <Style TargetType="namespace:CustomLabel">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="namespace:CustomLabel">
                    <StackPanel Orientation="Horizontal" MinWidth="250" VerticalAlignment="Top" Margin="0,0,0,16">
                        <ContentPresenter x:Name="MyLabel"/>
                        <TextBlock x:Name="Colon" Text=":" Visibility="Visible">
                        <i:Interaction.Triggers>
                            <ia:DataTrigger Binding="{TemplateBinding Content}" Value="{x:Null}">
                                <ia:ChangePropertyAction TargetObject="{Binding Colon}" PropertyName="Visibility" Value="Collapsed"/>
                            </ia:DataTrigger>
                        </i:Interaction.Triggers>
                        </TextBlock>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


Dit crasht niet, maar doet ook geen zak. De colon blijft gewoon staan, ook als de content leeg is (of eigenlijk: helemaal niet geset... hmm). Iemand nog een idee? Die Comparison erin zetten?

[ Voor 73% gewijzigd door Dark Blue op 01-06-2011 16:18 ]

heidiulrich.nl | adventura.nl : rugzakavonturen | pathwise.nl : prepping geeks to get jobs