none
wpf mettre une variable dans un grid

    Question

  • bonjour

    j'avance doucement et là je bloque un peu

     j'ai un projet wpf sur ma fenêtre xaml j'ai un grid de 6 case et une ligne je voudrais pouvoir mettre le résultat d'un variable  par un textblock dans chaque case du grid mais je sais pas comment affecter cette variable issu d'un calcul fenêtre code .cs

    merci de m'aider

    mercredi 19 octobre 2016 13:16

Réponses

  • Bonjour SIMONGEORGES,

    Pour faire suite à la réponse de V HELLIN, voici un exemple :

    MainPage.xaml, un fenêtre avec un Grille de 6 colonnes et un TextBlock par colonnes :

    <Window x:Class="DataBindingSample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:DataBindingSample"
            mc:Ignorable="d"
            Title="MainWindow"
            Height="350"
            Width="525">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <TextBlock x:Name="textBlock"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur1}" />
            <TextBlock x:Name="textBlock1"
                       Grid.Column="1"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur2}" />
            <TextBlock x:Name="textBlock2"
                       Grid.Column="2"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur3}" />
            <TextBlock x:Name="textBlock3"
                       Grid.Column="3"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur4}" />
            <TextBlock x:Name="textBlock4"
                       Grid.Column="4"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur5}" />
            <TextBlock x:Name="textBlock5"
                       Grid.Column="5"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur6}" />
            <Button x:Name="CalculateButton"
                    Grid.Row="1"
                    Grid.ColumnSpan="6"
                    Content="Calculer les valeurs"
                    Click="CalculateButton_Click" />
        </Grid>
    </Window>

    Et le fichier MainWindow.xaml.cs qui contient les propriétés qui sont liés à chaque TextBlock :

    using System.ComponentModel;
    using System.Windows;
    
    namespace DataBindingSample
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window, INotifyPropertyChanged
        {
            public MainWindow()
            {
                InitializeComponent();
                DataContext = this;
    
                _valeur1 = 0;
                _valeur2 = 0;
                _valeur3 = 0;
                _valeur4 = 0;
                _valeur5 = 0;
                _valeur6 = 0;
            }
    
            private int _valeur1;
            public int Valeur1
            {
                get { return _valeur1; }
                set { _valeur1 = value; OnPropertyChanged("Valeur1"); }
            }
    
            private int _valeur2;
            public int Valeur2
            {
                get { return _valeur2; }
                set { _valeur2 = value; OnPropertyChanged("Valeur2"); }
            }
    
            private int _valeur3;
            public int Valeur3
            {
                get { return _valeur3; }
                set { _valeur3 = value; OnPropertyChanged("Valeur3"); }
            }
    
            private int _valeur4;
            public int Valeur4
            {
                get { return _valeur4; }
                set { _valeur4 = value; OnPropertyChanged("Valeur4"); }
            }
    
            private int _valeur5;
            public int Valeur5
            {
                get { return _valeur5; }
                set { _valeur5 = value; OnPropertyChanged("Valeur5"); }
            }
    
            private int _valeur6;
            public int Valeur6
            {
                get { return _valeur6; }
                set { _valeur6 = value; OnPropertyChanged("Valeur6"); }
            }
    
            private void CalculateButton_Click(object sender, RoutedEventArgs e)
            {
                Valeur1 = 1;
                Valeur2 = 2;
                Valeur3 = 3;
                Valeur4 = 4;
                Valeur5 = 5;
                Valeur6 = 6;
            }
    
            private void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this,
                        new PropertyChangedEventArgs(propertyName));
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
        }
    }
    

    N'hésitez pas à vous renseigner du le contexte de données ainsi que le binding en WPF.

    Cordialement,

    • Marqué comme réponse SIMONGEORGES jeudi 20 octobre 2016 14:01
    jeudi 20 octobre 2016 09:40

Toutes les réponses

  • Bonjour,

    Pour positionner un contrôle dans une grid, vous avez à votre disposition les Attached Property Row et Colum utilisable de la façon suivante :

    <Grid>
    <TextBloxk Grid.Row="0" Grid.Column="0" />
    </Grid>

    Ensuite pour associer la valeur, utiliser le Data Binding proposé par WPF. N'ayant pas votre code, je ne peux pas être plus précis pour résoudre votre problème.

    jeudi 20 octobre 2016 03:39
  • bonjour un grand merci de votre réponse pour cela je vous joint le code xaml et le code cs pour  aide afin d'obtenir encore votre aide

    code xmal

    <Window x:Class="WpfApplication1_jeu_loto3.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1_jeu_loto3"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
            <Grid Name="boules" Width="150" Height="30" Margin="71,10,71,0" Background="#FF1DFF00">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="31*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Grid.Row="0">ble!</TextBlock>
            </Grid>
            <Button Name="btn1" Content="tirage" Click="btn1_tirage"></Button>
            <Button Name="btn2" Content="nouveau tirage" Click="btn2_nouveau_tirage"></Button>
    

    le code cs

    namespace WpfApplication1_jeu_loto3
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void btn1_tirage(object sender, RoutedEventArgs e)
            {
                int b;
                int racine = DateTime.Now.Millisecond;
                Random rnd = new Random(racine);
                for (int i = 1; i < 6; i++) ;
                b = (rnd.Next(1, 50));
                string ble;
                ble = b.ToString();
                MessageBox.Show( ble);
                //ici je voudrais afficher les 5 resultats dans la grille de la fentre xmal comment faire ?
            }
    
    

    jeudi 20 octobre 2016 09:26
  • Bonjour SIMONGEORGES,

    Pour faire suite à la réponse de V HELLIN, voici un exemple :

    MainPage.xaml, un fenêtre avec un Grille de 6 colonnes et un TextBlock par colonnes :

    <Window x:Class="DataBindingSample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:DataBindingSample"
            mc:Ignorable="d"
            Title="MainWindow"
            Height="350"
            Width="525">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <TextBlock x:Name="textBlock"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur1}" />
            <TextBlock x:Name="textBlock1"
                       Grid.Column="1"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur2}" />
            <TextBlock x:Name="textBlock2"
                       Grid.Column="2"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur3}" />
            <TextBlock x:Name="textBlock3"
                       Grid.Column="3"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur4}" />
            <TextBlock x:Name="textBlock4"
                       Grid.Column="4"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur5}" />
            <TextBlock x:Name="textBlock5"
                       Grid.Column="5"
                       TextWrapping="Wrap"
                       Text="{Binding Valeur6}" />
            <Button x:Name="CalculateButton"
                    Grid.Row="1"
                    Grid.ColumnSpan="6"
                    Content="Calculer les valeurs"
                    Click="CalculateButton_Click" />
        </Grid>
    </Window>

    Et le fichier MainWindow.xaml.cs qui contient les propriétés qui sont liés à chaque TextBlock :

    using System.ComponentModel;
    using System.Windows;
    
    namespace DataBindingSample
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window, INotifyPropertyChanged
        {
            public MainWindow()
            {
                InitializeComponent();
                DataContext = this;
    
                _valeur1 = 0;
                _valeur2 = 0;
                _valeur3 = 0;
                _valeur4 = 0;
                _valeur5 = 0;
                _valeur6 = 0;
            }
    
            private int _valeur1;
            public int Valeur1
            {
                get { return _valeur1; }
                set { _valeur1 = value; OnPropertyChanged("Valeur1"); }
            }
    
            private int _valeur2;
            public int Valeur2
            {
                get { return _valeur2; }
                set { _valeur2 = value; OnPropertyChanged("Valeur2"); }
            }
    
            private int _valeur3;
            public int Valeur3
            {
                get { return _valeur3; }
                set { _valeur3 = value; OnPropertyChanged("Valeur3"); }
            }
    
            private int _valeur4;
            public int Valeur4
            {
                get { return _valeur4; }
                set { _valeur4 = value; OnPropertyChanged("Valeur4"); }
            }
    
            private int _valeur5;
            public int Valeur5
            {
                get { return _valeur5; }
                set { _valeur5 = value; OnPropertyChanged("Valeur5"); }
            }
    
            private int _valeur6;
            public int Valeur6
            {
                get { return _valeur6; }
                set { _valeur6 = value; OnPropertyChanged("Valeur6"); }
            }
    
            private void CalculateButton_Click(object sender, RoutedEventArgs e)
            {
                Valeur1 = 1;
                Valeur2 = 2;
                Valeur3 = 3;
                Valeur4 = 4;
                Valeur5 = 5;
                Valeur6 = 6;
            }
    
            private void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this,
                        new PropertyChangedEventArgs(propertyName));
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
        }
    }
    

    N'hésitez pas à vous renseigner du le contexte de données ainsi que le binding en WPF.

    Cordialement,

    • Marqué comme réponse SIMONGEORGES jeudi 20 octobre 2016 14:01
    jeudi 20 octobre 2016 09:40
  • un grand merci
    jeudi 20 octobre 2016 14:01