Toon posts:

[Silverlight] Interaction.Trigger lijkt niet te werken

Pagina: 1
Acties:

Onderwerpen


  • Dark Blue
  • Registratie: Februari 2001
  • Laatst online: 18-05 09:06

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 / eigenzinnige rugzakavonturen in europa


  • hgp
  • Registratie: Juni 2008
  • Laatst online: 21-05 23:44
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)

  • Dark Blue
  • Registratie: Februari 2001
  • Laatst online: 18-05 09:06

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 / eigenzinnige rugzakavonturen in europa



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee