web-dev-qa-db-fra.com

Fenêtre WPF avec fond transparent contenant des contrôles opaques

J'ai une fenêtre avec l'apparence suivante:

enter image description here

Ce que je voudrais cependant, c’est que si les contrôles Button (les contrôles gris avec du texte au milieu) dans Window's principal Grid aient une opacité de 1, totalement opaque. Lorsque j'ai hérité de ce projet, l'opacité a été définie sur 0,75 au niveau supérieur, à l'intérieur de la balise d'ouverture Window. Si j'ai bien compris, cela va automatiquement imposer cela à tous les enfants, ce qui signifie que les enfants ne peuvent pas passer outre.

Comment puis-je accomplir le fond transparent mais les boutons opaques? Le seul moyen que j’ai trouvé jusqu’à présent (en tant que novice relatif dans WPF) est d’avoir deux fenêtres distinctes, l’un avec l’arrière-plan transparent et l’autre sans arrière-plan, mais contenant les contrôles opaques. Ceci est terriblement hacky cependant et je veux l'éviter si je peux.

Je peux fournir du code si nécessaire, mais c'est aussi simple qu'un Window avec windowstyle = none et une opacité 0,75 contenant un Grid, qui contient quelques contrôles de base Button etc.

Quelqu'un a-t-il déjà construit un tel nom Window ou a-t-il une idée de sa génération? Merci.

44
kmarks2

Au lieu de définir l'opacité de la fenêtre, définissez l'opacité de son arrière-plan:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        AllowsTransparency="True" WindowStyle="None">
    <Window.Background>
        <SolidColorBrush Opacity="0.5" Color="White"/>
    </Window.Background>
    <Grid>
        <Button Width="200" Height="50">button</Button>
    </Grid>
</Window>
88
svinja

Si vous créez un style comme celui-ci:

<Window.Resources>
    <Style TargetType="Button" x:Key="WindowButtons">
        <Setter Property="Opacity" Value="1"/>           
    </Style>
</Window.Resources>

Ensuite, vous pouvez référencer ceux du XAML pour votre bouton comme ceci:

<Button Style="{StaticResource WindowButtons}">Tony</Button>

Et il ne devrait plus hériter de l'opacité de son parent.

1
TylerD87

L'effet ci-dessus peut également être obtenu en réglant l'opacité du concepteur de 100% à 60% (selon les besoins).

0
RSB