1

WP7.5アプリケーションでは、グリッドを含むリストボックスがあります。このグリッドには、2つの行と2つの列(2x2)が含まれています

グリッドでは、テキストボックスを表示しますが、問題は配置が悪いことです。理由はわかりません。horizo​​ntalAligement=trueに設定しましたが、変更はありません。

これが私のコードです:

<ListBox x:Name="ListBoxTiers"  HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0">
<ListBox.ItemTemplate>
    <DataTemplate>

        <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Top" >
            <Grid Margin="20" VerticalAlignment="Top" HorizontalAlignment="Left">
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock  HorizontalAlignment="Left" TextWrapping="Wrap" Grid.Row="0" Grid.Column="0" Margin="0,0,10,0" x:Name="TxtBox_cCodeTiers" Text="{Binding m_strCode}" FontWeight="Bold" FontSize="22" />
                <TextBlock  HorizontalAlignment="Left" TextWrapping="Wrap" Grid.Row="0" Grid.Column="1" Margin="0,0,10,0" x:Name="TxtBox_cNomTiers" Text="{Binding m_strNom}"   FontWeight="Bold" FontSize="22" />
                <TextBlock  HorizontalAlignment="Left" TextWrapping="Wrap" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0" Margin="0,0,10,0" x:Name="TxtBox_cCPostal" Text="{Binding m_strFonction}" />                                   
            </Grid>

        </StackPanel>

    </DataTemplate>
</ListBox.ItemTemplate>

これが私の結果です:

ここに画像の説明を入力してください

これが私のクラスです:

public class CTiers
{
    public enum TypeTiers { Client, Fournisseur, Contact, Collaborateur, Commercial, Prospect};

    TypeTiers m_TypeTiers { set; get; }

    public string m_strTypeTiers { get; set; }
    public string m_strCode    { set; get; }
    public string m_strNom { set; get; }
    public string m_strPrenom { set; get; }
    public string m_strTel { set; get; }
    public string m_strGsm { set; get; }
    public string m_strFax { set; get; }
    public string m_strMail { set; get; }
    public string m_strWebSite { set; get; }
    public string m_strVille { set; get; }
    public string m_strCpostal { set; get; }
    public string m_strRue { set; get; }
    public string m_strFonction { set; get; }

    public CTiers()
    {

    }

    public CTiers(TypeTiers oTypeTiers, string strCode, string strNom, string strPrenom, string strTel, string strGsm, string strFax, string strRue,string strVille,string strCPostal,string strMail,string strWebSite,string strFonction)
    {
        m_TypeTiers = oTypeTiers;
        m_strCode = strCode.Trim();
        m_strNom = strNom.Trim();
        m_strPrenom = strPrenom.Trim();
        m_strVille = strVille.Trim();
        m_strTel = strTel.Trim();
        m_strGsm = strGsm.Trim();
        m_strFax = strFax.Trim();
        m_strWebSite = strWebSite.Trim();
        m_strRue = strRue.Trim();
        m_strMail = strMail.Trim();
        m_strCpostal = strCPostal.Trim();
        m_strTypeTiers = oTypeTiers.ToString().Trim();
        m_strFonction = strFonction.Trim();
    }

}

誰か助けてくれませんか?

どうもありがとう :)

よろしくお願いします

4

3 に答える 3

2

あなたのコードは大丈夫です、問題はテキストのトリミングだけにあります。

私はあなたの質問で同じxamlを使用し、サンプルを作成しました。

ケース1:最初にすべての弦をトリミングしました

List<Myclass> list = new List<Myclass>();
list.Add(new Myclass() { m_strCode = "001", m_strNom = "sample1", m_strFonction = "Fonction1" });
list.Add(new Myclass() { m_strCode = "002", m_strNom = "sample2", m_strFonction = "Fonction2" });
list.Add(new Myclass() { m_strCode = "003", m_strNom = "sample3 ", m_strFonction = "Fonction3" });
list.Add(new Myclass() { m_strCode = "004", m_strNom = "sample4", m_strFonction = "Fonction4" });
list.Add(new Myclass() { m_strCode = "005", m_strNom = "sample5", m_strFonction = "Fonction5" });
ListBoxTiers.ItemsSource = list;

そして結果は次のとおりです:(あなたが期待するように明確にフォーマットされています)

ここに画像の説明を入力してください

ケース2:この場合、余分なスペースのある文字列をいくつか取得しました(sample1と004を参照)

List<Myclass> list = new List<Myclass>();
list.Add(new Myclass() { m_strCode = "001", m_strNom = "    sample1", m_strFonction = "Fonction1" });
list.Add(new Myclass() { m_strCode = "002", m_strNom = "sample2", m_strFonction = "Fonction2" });
list.Add(new Myclass() { m_strCode = "003", m_strNom = "sample3 ", m_strFonction = "Fonction3" });
list.Add(new Myclass() { m_strCode = "004    ", m_strNom = "sample4", m_strFonction = "Fonction4" });
list.Add(new Myclass() { m_strCode = "005", m_strNom = "sample5", m_strFonction = "Fonction5" });
ListBoxTiers.ItemsSource = list;

そして今、結果は次のとおりです:

ここに画像の説明を入力してください

したがって、問題は、テキストが適切にトリミングされていないことです。気をつけて。

アップデート:

どうぞ。オブジェクトをインスタンス化するために、常にコンストラクターを呼び出すとは限りません。だから、より良い方法はこれです。

    private string _m_strFonction;
    private string _m_strNom;
    private string _m_strCode;

    public string m_strCode
    {
        get { return _m_strCode; }
        set { _m_strCode = value.Trim(); }
    }
    public string m_strNom
    {
        get { return _m_strNom; }
        set { _m_strNom = value.Trim(); }
    }
    public string m_strFonction 
    { 
        get { return _m_strFonction; }
        set { _m_strFonction = value.Trim(); }
    }
于 2013-01-23T05:57:52.660 に答える
1

問題はテキストのトリミングMarginにあると思います。Grid

Margin次のように設定してみてください"0, 20, 20, 20"

<ListBox x:Name="ListBoxTiers" ItemsSource="{Binding}" 
         HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0"          
         >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" VerticalAlignment="Top" >
                <Grid Margin="0, 20, 20, 20" VerticalAlignment="Top" HorizontalAlignment="Left">
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock  HorizontalAlignment="Left" TextWrapping="Wrap" Grid.Row="0" Grid.Column="0" Margin="0,0,10,0" x:Name="TxtBox_cCodeTiers" Text="{Binding m_strCode}" FontWeight="Bold" FontSize="22" Loaded="TxtBlock_Loaded" />
                    <TextBlock  HorizontalAlignment="Left" TextWrapping="Wrap" Grid.Row="0" Grid.Column="1" Margin="0,0,10,0" x:Name="TxtBox_cNomTiers" Text="{Binding m_strNom}"   FontWeight="Bold" FontSize="22" Loaded="TxtBlock_Loaded"  />
                    <TextBlock  HorizontalAlignment="Left" TextWrapping="Wrap" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0" Margin="0,0,10,0" x:Name="TxtBox_cCPostal" Text="{Binding m_strFonction}" Loaded="TxtBlock_Loaded"  />
                </Grid>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

配置を改善するためにテキストをトリミングします。

private void TxtBlock_Loaded(object sender, RoutedEventArgs e)
{
     TextBlock tb = sender as TextBlock;
     tb.Text = tb.Text.Trim();
}

列に一定幅のデータが含まれている場合は、XAMLで指定できます。

<Grid.ColumnDefinitions>
       <ColumnDefinition Width="50" />
       <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
于 2013-01-20T18:37:46.163 に答える
1

ListBoxよりもListViewの方がおそらく良いでしょう。ただし、リストボックスを使用する必要がある場合、発生している問題は、すべてのデータ項目に独自のグリッドがあるためです。つまり、同じ列を共有していません。これを回避するには、各列定義に幅を追加します。

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="100" />
  <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

これにより、すべての左側の列に共通の幅が提供され、右側の列もすべて同じ場所から始まります。左側の列に幅として設定されているものよりも幅が広いものはないと仮定します。

于 2013-01-20T19:24:19.557 に答える