---
title: Propriétés UI
type: docs
weight: 13
---

Cette page documente les propriétés communes disponibles sur les widgets UI.

## Anchor (Positionnement)

La propriété `Anchor` contrôle la position et la taille du widget.

### Propriétés de Position

```
Anchor: (
  Left: 10,      // Distance depuis le bord gauche
  Right: 10,     // Distance depuis le bord droit
  Top: 10,       // Distance depuis le bord supérieur
  Bottom: 10     // Distance depuis le bord inférieur
);
```

### Propriétés de Taille

```
Anchor: (
  Width: 200,    // Largeur fixe
  Height: 100    // Hauteur fixe
);
```

### Propriétés Raccourcies

```
Anchor: (Full: 10);           // Tous les côtés = 10
Anchor: (Horizontal: 20);     // Gauche et Droite = 20
Anchor: (Vertical: 15);       // Haut et Bas = 15
```

### Exemple Combiné

```
// Taille fixe, positionné depuis le coin supérieur gauche
Anchor: (Left: 50, Top: 100, Width: 300, Height: 200);

// Remplit le parent avec des marges
Anchor: (Full: 16);

// Ancré au coin inférieur droit
Anchor: (Right: 20, Bottom: 20, Width: 100, Height: 40);

// Pleine largeur, hauteur fixe en bas
Anchor: (Horizontal: 0, Bottom: 0, Height: 50);
```

## Background

La propriété `Background` définit l'apparence du fond du widget.

### Couleur Unie

```
Background: (Color: #ff5500);
Background: (Color: #000000(0.5));    // Avec opacité
```

### Texture Simple

```
Background: "MyTexture.png";
Background: (TexturePath: "MyTexture.png");
```

### Texture 9-Patch (Étirable)

```
// Bordure uniforme
Background: (TexturePath: "Panel.png", Border: 20);

// Bordures horizontales/verticales séparées
Background: (
  TexturePath: "Button.png",
  HorizontalBorder: 80,
  VerticalBorder: 12
);
```

### Utiliser PatchStyle

```
@MyBackground = PatchStyle(
  TexturePath: "Panel.png",
  Border: 16
);

Group {
  Background: @MyBackground;
}
```

## Padding

La propriété `Padding` définit l'espacement intérieur.

```
Padding: (Full: 16);              // Tous les côtés
Padding: (Horizontal: 20);        // Gauche et Droite
Padding: (Vertical: 10);          // Haut et Bas
Padding: (Left: 10, Right: 20);   // Côtés individuels
Padding: (Top: 5, Bottom: 15, Horizontal: 10);
```

### Utiliser le Constructeur Padding

```
@ContentPadding = Padding(Full: 16, Top: 8);

Group {
  Padding: @ContentPadding;
}
```

## LayoutMode

La propriété `LayoutMode` contrôle l'arrangement des enfants.

### Modes d'Empilement

| Mode | Description |
|------|-------------|
| `Top` | Empile les enfants de haut en bas |
| `Bottom` | Empile les enfants de bas en haut |
| `Left` | Empile les enfants de gauche à droite |
| `Right` | Empile les enfants de droite à gauche |

```
Group {
  LayoutMode: Top;      // Liste verticale, alignée en haut

  Label { Text: "Premier"; Anchor: (Height: 30); }
  Label { Text: "Deuxième"; Anchor: (Height: 30); }
  Label { Text: "Troisième"; Anchor: (Height: 30); }
}
```

### Modes de Centrage

| Mode | Description |
|------|-------------|
| `Middle` | Centre les enfants verticalement |
| `CenterMiddle` | Centre les enfants horizontalement et verticalement |

```
Group {
  LayoutMode: CenterMiddle;

  Label { Text: "Centré !"; }
}
```

### Modes avec Défilement

| Mode | Description |
|------|-------------|
| `TopScrolling` | Défilement vertical, contenu depuis le haut |
| `BottomScrolling` | Défilement vertical, contenu depuis le bas (style chat) |

```
Group #ChatLog {
  LayoutMode: BottomScrolling;
  ScrollbarStyle: @DefaultScrollbarStyle;
  AutoScrollDown: true;
}
```

### Mode Retour à la Ligne

| Mode | Description |
|------|-------------|
| `LeftCenterWrap` | Flux gauche-droite, retour à la ligne suivante |

```
Group #ItemGrid {
  LayoutMode: LeftCenterWrap;

  // Les items passeront à la ligne suivante
}
```

## FlexWeight

La propriété `FlexWeight` contrôle le dimensionnement flexible dans la mise en page.

```
Group {
  LayoutMode: Left;

  Group {
    Anchor: (Width: 100);    // Largeur fixe
  }

  Group {
    FlexWeight: 1;           // Prend l'espace restant
  }

  Group {
    FlexWeight: 2;           // Prend 2x l'espace de FlexWeight: 1
  }
}
```

## Visible

Contrôle la visibilité du widget.

```
Group #Panel {
  Visible: true;    // ou false, ou @Variable
}

Button #CloseButton {
  Visible: @CloseButton;    // Contrôlé par paramètre de template
}
```

## Text

Définit le contenu texte pour les widgets Label et TextButton.

```
Label {
  Text: "Texte statique";
}

Label {
  Text: %server.ui.title;    // Clé de traduction
}

Label #DynamicText {
  Text: "";                  // Défini depuis Java
}
```

## ScrollbarStyle

Configure l'apparence de la scrollbar pour les conteneurs défilants.

```
Group {
  LayoutMode: TopScrolling;
  ScrollbarStyle: (
    Spacing: 6,
    Size: 6,
    Background: (TexturePath: "Scrollbar.png", Border: 3),
    Handle: (TexturePath: "ScrollbarHandle.png", Border: 3),
    HoveredHandle: (TexturePath: "ScrollbarHandleHovered.png", Border: 3),
    DraggedHandle: (TexturePath: "ScrollbarHandleDragged.png", Border: 3)
  );
}
```

### Options ScrollbarStyle

| Propriété | Description |
|-----------|-------------|
| `Spacing` | Écart entre la scrollbar et le contenu |
| `Size` | Largeur/hauteur de la scrollbar |
| `Background` | Fond de la piste |
| `Handle` | Apparence normale de la poignée |
| `HoveredHandle` | Poignée au survol |
| `DraggedHandle` | Poignée pendant le glissement |
| `OnlyVisibleWhenHovered` | Masquer quand pas d'interaction |

## AutoScrollDown

Pour les conteneurs BottomScrolling, défile automatiquement vers le nouveau contenu.

```
Group #ChatLog {
  LayoutMode: BottomScrolling;
  AutoScrollDown: true;
}
```

## Disabled

Désactive l'interaction avec un widget.

```
Button #SubmitButton {
  Disabled: false;
}

ActionButton #Binding {
  Disabled: true;
}
```

## TooltipText

Affiche une infobulle au survol.

```
Button #InfoButton {
  TooltipText: %ui.tooltip.help;
}
```

## TextTooltipStyle

Configure l'apparence de l'infobulle.

```
Button {
  TooltipText: "Texte d'aide";
  TextTooltipStyle: (
    Background: (TexturePath: "TooltipBg.png", Border: 24),
    MaxWidth: 400,
    LabelStyle: (Wrap: true, FontSize: 16),
    Padding: 24
  );
}
```

## Combinaisons de Propriétés Courantes

### Panneau avec Titre et Contenu

```
Group #Panel {
  Anchor: (Width: 400, Height: 300);
  Background: (TexturePath: "Panel.png", Border: 20);
  LayoutMode: Top;
  Padding: (Full: 16);

  Label #Title {
    Anchor: (Height: 40);
    // ...
  }

  Group #Content {
    FlexWeight: 1;
    LayoutMode: TopScrolling;
    ScrollbarStyle: @DefaultScrollbarStyle;
    Padding: (Top: 8);
  }
}
```

### Rangée de Boutons Horizontale

```
Group #ButtonRow {
  Anchor: (Height: 50);
  LayoutMode: Right;
  Padding: (Horizontal: 10);

  TextButton #Cancel {
    Anchor: (Width: 100);
  }

  Group { Anchor: (Width: 10); }  // Espaceur

  TextButton #Confirm {
    Anchor: (Width: 100);
  }
}
```

### Overlay Plein Écran

```
Group #Overlay {
  Anchor: (Full: 0);
  Background: (Color: #000000(0.7));
  LayoutMode: CenterMiddle;

  Group #Dialog {
    Anchor: (Width: 500, Height: 300);
    Background: (TexturePath: "Dialog.png", Border: 20);
  }
}
```
