127 votes

WPF : Réglage de la largeur (et hauteur) comme une valeur en pourcentage

Dire que je veux un TextBlock à avoir son Width égale à celle du Parent conteneur Width (c'est à dire, s'étendent d'un côté à l'autre) ou un pourcentage de son Conteneur Parent Width, comment puis-je le faire dans XAML sans spécifier des valeurs absolues?

Je veux le faire de sorte que si le Parent Conteneur est ensuite élargi (' Width augmentation), ses Éléments Enfants sera également élargi automatiquement. (en gros, comme dans le HTML et CSS)

188voto

cwap Points 6098
<p>Ne pense pas que vous pouvez faire %, mais vous pouvez faire *  :)<p>Exemple :</p><pre><code></code></pre><p>Cela rendra #1 2/5 de la largeur et 2 # 3/5.</p></p>

82voto

gcores Points 6618
<p>La façon d’étirer jusqu'à la même taille que le conteneur parent est d’utiliser l’attribut :<pre><code></code></pre><p>Qui va faire l’élément Textbox s’étendent horizontalement et remplir tout l’espace parent horizontalement (en fait, ça dépend sur le panneau parent vous utilisez mais devriez fonctionner pour la plupart des cas).</p><p>Pourcentages utilisable uniquement avec les valeurs de cellule de grille pour une autre option consiste à créer une grille et mettre votre textbox dans une des cellules avec le pourcentage approprié.</p></p>

47voto

kvb Points 35490

En règle générale, vous utilisez un haut-le contrôle de mise en fonction de votre scénario (par exemple, utilisation d'une grille en tant que parent, si vous voulez de mise à l'échelle par rapport à la mère). Si vous voulez le faire avec l'arbitraire d'un élément parent, vous pouvez créer un ValueConverter le faire, mais il ne sera probablement pas tout à fait aussi propre que vous le souhaitez. Toutefois, si vous avez absolument besoin, vous pourriez faire quelque chose comme ceci:

public class PercentageConverter : IValueConverter
{
    public object Convert(object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        return System.Convert.ToDouble(value) * 
               System.Convert.ToDouble(parameter);
    }

    public object ConvertBack(object value, 
        Type targetType, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Qui peut être utilisé comme ce, pour obtenir un enfant textbox 10% de la largeur de son parent toile:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <local:PercentageConverter x:Key="PercentageConverter"/>
    </Window.Resources>
    <Canvas x:Name="canvas">
        <TextBlock Text="Hello"
                   Background="Red" 
                   Width="{Binding 
                       Converter={StaticResource PercentageConverter}, 
                       ElementName=canvas, 
                       Path=ActualWidth, 
                       ConverterParameter=0.1}"/>
    </Canvas>
</Window>

28voto

Zain Ali Points 3813
<p>Pour tout organisme qui devient l’erreur comme : <strong>2 *' chaîne ne peut pas être convertie en longueur.</strong><pre><code></code></pre></p>

4voto

Crippeoblade Points 1301
<p>Je sais que ce n’est pas Xaml, mais j’ai fait la même chose avec l’événement SizeChanged du textbox :<pre><code></code></pre><p>La zone de texte semble être de 80 % de la taille de ses parents (bien bonne marge latérale est de 20 %) et s’étend au besoin.</p></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: