Archief - [XAML]text in een border

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

spikie

Legacy Member
ik ben aan mijn eerste WPF project bezig en heb hier een vraag bij.

mijn main window bestaat uit een grid van 2 rijen en 3 kolommen

in elke cell staat een stackpanel met een border rond
de bovenzijde van die border is dikker zodat er een soort van titelbalk ontstaat

in die "titelbalk" zou er tekst moeten komen, kan ik dit doen via border of moet ik daarvoor een textblock voorzien opgevuld in dezelfde kleur als de border?

Tyfius

Legacy Member
Je kan de achtergrond kleur van de TextBlock transparant maken (of op {x:Null}) zetten.

spikie

Legacy Member
Tyfius zei:
Je kan de achtergrond kleur van de TextBlock transparant maken (of op {x:Null}) zetten.
ik had ni gedacht da ik een textblock over die border zou kunnen zetten

thx :niceone:

Da Turtle

Legacy Member
Zoiets best niet op die manier. In plaats van een dikke border te geven bovenaan, zet die border op 0 en steek een TextBlock bovenaan in je stackpanel met dezelfde achtergrondkleur als de border. Op die manier moet je niet telkens de border dikte bovenaan aanpassen als je de lettergrootte van je titel aanpast maar schaalt die mooi mee. Het zou kunnen dat je iets in de aard van HorizontalAlignment="Stretch" zult moeten toevoegen aan die TextBlock om hem steeds de breedte van het stackpanel te maken, maar ik denk dat dit standaard gedrag is. Als je ook margins rond je tekst wil instellen kan je het ook zo doen met nog een extra border element:
Code:
<Border ...>
   <StackPanel ...>
      <Border Background="KleurVanDeVorigeBorder">
          <TextBlock Text="Dit is de titel" Margin="links,boven,rechts,onder" />
      </Border>
      <!-- De rest van de inhoud van je stackpanel -->
   </StackPanel>
</Border>

voltje

Legacy Member
Of je past gewoon de margin top aan van je textblock?
Zoals bijvoorbeeld: <TextBlock Margin="0 -20 0 0" />

Maar wat ik me afvraag...
Als je dus een soort titel hebt, waarom maak je ipv een dikke border niet gewoon een volledige row voor de titel?
Je kan dat deze rij een achtergrondkleur geven, en in deze rij dus ook gewoon controls plaatsen zoals textblock...

(Dit is de manier dat ik het altijd doe, en lijkt mij ook de beste)

Da Turtle

Legacy Member
voltje zei:
Of je past gewoon de margin top aan van je textblock?
Ja, dat is het inderdaad, foutje van mij :) (aangepast)

<edit>
voltje zei:
Zoals bijvoorbeeld: <TextBlock Margin="0 -20 0 0" />
Waarom -20 bovenaan? Dat snap ik niet goed.
</edit>

voltje zei:
Maar wat ik me afvraag...
Als je dus een soort titel hebt, waarom maak je ipv een dikke border niet gewoon een volledige row voor de titel?
Je kan dat deze rij een achtergrondkleur geven, en in deze rij dus ook gewoon controls plaatsen zoals textblock...

(Dit is de manier dat ik het altijd doe, en lijkt mij ook de beste)
Ja, dat is ook goeie manier. Ik verkies soms om dit niet te doen om geen te ingewikkelde Row- en Columndefinitions te hebben, maar in dit geval valt het nog goed mee.

voltje

Legacy Member
Goh ... Als ik wpf applicaties maak dan heb ik toch een hele hoop grid rows/columns.

En waarom de top op -20? Om hem naar boven te zetten e ;)
Je plaatst een grid, je zet de border top redelijk groot.
Je zet er onder een textblock maar dan schuiven we deze naar boven zodat hij op de border komt te liggen...

Maar toch niet echt een goede manier ze, als je ze niet begrijpt, gewoon vergeten. Het werkt maar ik zou de andere manier dat ik zei aanraden :)

Da Turtle

Legacy Member
Ah ja zo, dat is iets in de aard van wat spikie nu gedaan heeft, dat noem ik prutsen :p

spikie

Legacy Member
tis mijn eerste wpf applicatie, ik doe ni anders dan prutsen :p

voltje zei:
Of je past gewoon de margin top aan van je textblock?
Zoals bijvoorbeeld: <TextBlock Margin="0 -20 0 0" />

Maar wat ik me afvraag...
Als je dus een soort titel hebt, waarom maak je ipv een dikke border niet gewoon een volledige row voor de titel?
Je kan dat deze rij een achtergrondkleur geven, en in deze rij dus ook gewoon controls plaatsen zoals textblock...

(Dit is de manier dat ik het altijd doe, en lijkt mij ook de beste)
ik veronderstel da ge een grid row bedoelt?
hoe zet ge daar dan de achtergrondkleur in?

nu heb ik dus een grid gemaakt met 2 rijen, de bovenste rij doet dan dienst als titelbalk, met een textblock en achtergrondkleur op die textblock ingesteld

probleem is nu wel dat ik op textblock geen cornerradius kan instellen, op die border stond da wel

Da Turtle

Legacy Member
spikie zei:
probleem is nu wel dat ik op textblock geen cornerradius kan instellen, op die border stond da wel

Aha. Dan zal mijn oplossing ook niet zo goed werken. De background property van die TextBlock zal niet genoeg zijn daarvoor. Je hebt iets in die aard hé?
Code:
<Border BorderThickness="5,20,5,5" CornerRadius="20" BorderBrush="BurlyWood" />
Ik heb eens getest hoe dat er uit ziet, en ik denk dat het niet veel beter kan dan de TextBlock over de border zetten.

voltje

Legacy Member
In je eerste gridrow een canvas zetten...
Daar alles instellen... (zoals rounded corners enzo)
en in die canvas je textblock zetten

spikie

Legacy Member
canvas heeft toch ook geen cornerradius?

post anders ff voorbeeld code als ge wilt :)

voltje

Legacy Member
Zoiets (volgens google)

Code:
<Border BorderBrush="Red" BorderThickness="1" CornerRadius="10" Width="402" Height="302">
    <Canvas Background="Gray" Margin="0" Width="400" Height="300">
      <Canvas.Clip>
        <GeometryGroup>
          <RectangleGeometry RadiusX="10" RadiusY="10" Rect="0,0,400,300" />
        </GeometryGroup>
      </Canvas.Clip>
    </Canvas>
  </Border>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan