2017-01-07 4 views
0

グリッドの列幅を設定する際に問題があります。そのグリッドはボタン内で自動生成され、実際の幅やウィンドウの幅はわかりません。私はそれに2つの列を定義しました.1つは静的な幅を持ち、もう1つは左のすべての場所に設定したいと思います。問題は、プログラムの実行時にすべてのグリッドと列を生成しているので、他のオブジェクトのwidthプロパティをdouble.NaNとして使用できないということです。グリッド列の幅

私は、picture(赤いテキストは単なるコメントにすぎません)のような時間を経て変更できる2つの列、1つの静的な幅と2つの列を含むボタングリッドを生成します。

グリッドの生成に使用するコード。問題のある列はwidthプロパティが "???"に設定されている列です今のところ:

Button GridButton = new Button() 
{ 
    HorizontalAlignment = HorizontalAlignment.Stretch, 
    Margin = new Thickness { Left = 10, Right = 5, Top = 10, Bottom = 10 }, 
    Height = 70, 
    /*HorizontalAlignment = HorizontalAlignment.Center, 
     HorizontalContentAlignment = HorizontalAlignment.Center, 
     VerticalAlignment = VerticalAlignment.Top, 
     VerticalContentAlignment = VerticalAlignment.Center, 
    */ 
    Tag = GridButtonTag, 
    Background = new SolidColorBrush(Colors.White), 
    Padding = new Thickness { Left = 0, Right = 0, Bottom = 0, Top = 0 } 
}; 

WholeGrid.Children.Add(GridButton); 

Grid ButtonContentGrid = new Grid() 
{ 
    Padding = new Thickness { Left = 0, Right = 0, Top = 0, Bottom = 0 }, 
}; 

double ColumnWidth = GridButton.Width - 80; 

ColumnDefinition Column1 = new ColumnDefinition(); 
ColumnDefinition Column2 = new ColumnDefinition(); 
Column1.Width = new GridLength(????); 
Column2.Width = new GridLength(90); 
ButtonContentGrid.ColumnDefinitions.Add(Column1); 
ButtonContentGrid.ColumnDefinitions.Add(Column2); 


TextBlock Questions = new TextBlock() 
{ 
    Margin = new Thickness { Right = 0, Top = 0, Bottom = 0 }, 
    Width = 90, 
    VerticalAlignment = VerticalAlignment.Center, 
    HorizontalAlignment = HorizontalAlignment.Right, 
    FontSize = 45, 
    Text = QuestionsAmount, 
    FontWeight = FontWeights.Bold, 
    TextAlignment = TextAlignment.Right 
}; 

Grid QuestionsGrid = new Grid() 
{ 
    Width = 90, 
    VerticalAlignment = VerticalAlignment.Center, 
    HorizontalAlignment = HorizontalAlignment.Center 
}; 

QuestionsGrid.Children.Add(Questions); 

Grid.SetColumn(QuestionsGrid, 1); 
ButtonContentGrid.Children.Add(QuestionsGrid); 

Grid TwoTexts = new Grid() 
{ 
    Height = 70, 
    VerticalAlignment = VerticalAlignment.Center, 
    HorizontalAlignment = HorizontalAlignment.Stretch, 
    Width = GridButton.Width - 80, 
    Padding = new Thickness { Left = 0, Right = 0, Top = 0, Bottom = 0 } 
}; 

RowDefinition TextRow1 = new RowDefinition(); 
RowDefinition TextRow2 = new RowDefinition(); 
TextRow1.Height = new GridLength(50); 
TextRow2.Height = new GridLength(20); 
TwoTexts.RowDefinitions.Add(TextRow1); 
TwoTexts.RowDefinitions.Add(TextRow2); 

TextBlock NameBox = new TextBlock() 
{ 
    Margin = new Thickness { Left = 0, Top = 0}, 
    VerticalAlignment = VerticalAlignment.Top, 
    HorizontalAlignment = HorizontalAlignment.Left, 
    FontSize = 35, 
    Text = Name, 
    FontWeight = FontWeights.Bold 
}; 

TextBlock DescriptionBox = new TextBlock() 
{ 
    Margin = new Thickness { Left = 0, Bottom = -10 }, 
    VerticalAlignment = VerticalAlignment.Bottom, 
    HorizontalAlignment = HorizontalAlignment.Left, 
    FontSize = 15, 
    Text = Description 
}; 

Grid.SetRow(NameBox, 0); 
TwoTexts.Children.Add(NameBox); 

Grid.SetColumn(DescriptionBox, 1); 
TwoTexts.Children.Add(DescriptionBox); 

Grid.SetColumn(TwoTexts, 0); 
ButtonContentGrid.Children.Add(TwoTexts); 

GridButton.Content = ButtonContentGrid; 

代替オプション - リストビュー(WidthValueではまだ同じ問題と再びプレース=「????」私は設定する方法がわからないものです):

<ListView Name="FileListView" Margin="0,0,0,0" Padding="10,10,10,10"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid Height="90" Margin="0,0,0,0" HorizontalAlignment="Stretch"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="2"/> 
        <RowDefinition Height="92"/> 
       </Grid.RowDefinitions> 

       <Grid Grid.Row="0" 
         BorderThickness="0,2" 
         CornerRadius="2" 
         BorderBrush="Black" 
         Margin="40,0" 
         VerticalAlignment="Top" 
         HorizontalAlignment="Stretch" 
         /> 

       <Grid Grid.Row="1" Height="90" Margin="0" Padding="0"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="65"/> 
        </Grid.ColumnDefinitions> 

        <Grid Name ="Texts" Grid.Column="0" HorizontalAlignment="Stretch" Margin="10,10"> 
         <Button HorizontalAlignment ="Stretch" Margin ="0" Height = "70" Tag = "{Binding GridButtonTag}" Background ="#00FFFFFF" Padding = "0"> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition/> 
            <ColumnDefinition Width="90"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Grid.Column="1" FontSize = "45" FontWeight="Bold" TextAlignment="Right" Text="{Binding QuestionsAmount}" /> 

           <Grid Grid.Column="0" Width="????"> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="40"/> 
             <RowDefinition Height="30"/> 
            </Grid.RowDefinitions> 

            <TextBlock Grid.Row="0" FontSize = "35" FontWeight="Bold" TextAlignment="Left" Text="{Binding Name}" VerticalAlignment="Center"/> 
            <TextBlock Grid.Row="1" FontSize = "17" TextAlignment="Left" Text="{Binding Description}" VerticalAlignment="Center"/> 
           </Grid> 
          </Grid> 
         </Button> 
        </Grid> 

        <Grid Grid.Column="1"> 
         <Grid Name="Buttons" Width ="65" HorizontalAlignment="Stretch" Padding = "10,5,10,10" Height = "90" Margin = "0"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="50"/> 
           <RowDefinition Height="20"/> 
          </Grid.RowDefinitions> 

          <Button Grid.Row="0" Tag = "{Binding PlayButtonTag}" Margin = "0" Height = "50" Width = "50" HorizontalAlignment = "Center" HorizontalContentAlignment = "Center" VerticalAlignment = "Top" VerticalContentAlignment = "Center" Background = "#00FFFFFF" Padding = "0"> 
           <Image Width="50" Height="50" Source="ms-appx:///Assets/Images/PlayIcon.png" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
          </Button> 

          <Grid Grid.Row="1" Margin="0,0,0,0" Padding="0,0,0,0" Width="50" Height="20"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="25"/> 
            <ColumnDefinition Width="20"/> 
           </Grid.ColumnDefinitions> 

           <Button Grid.Column="0" Tag = "{Binding EditButtonTag}" Margin = "0" Height = "20" Width = "20" HorizontalAlignment = "Left" HorizontalContentAlignment = "Center" VerticalAlignment = "Top" VerticalContentAlignment = "Center" Background = "#00FFFFFF" Padding = "0"> 
            <Image Width="20" Height="20" Source="ms-appx:///Assets/Images/EditIcon.png" HorizontalAlignment="Center" VerticalAlignment="Center" 
           </Button> 
           <Button Grid.Column="1" Margin = "0" Tag = "{Binding DeleteButtonTag}" Height = "20" Width = "20" HorizontalAlignment = "Right" HorizontalContentAlignment = "Center" VerticalAlignment = "Top" VerticalContentAlignment = "Center" Background = "#00FFFFFF" Padding = "0"> 
            <Image Width="20" Height="20" Source="ms-appx:///Assets/Images/DeleteIcon.png" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
           </Button> 
          </Grid> 
         </Grid> 
        </Grid> 
       </Grid> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

正しい結果を得るために、そのコードを変更したり書き込んだりするべきですか?

ありがとうございます。

+0

[リンク](http://imgur.com/a/1tzBl)これは私が実際にコードから得たものです(私が手に入れたいものではありません)(赤い図は、デバッガが私に境界線od –

答えて

0

設定しようとしているWidthを設定する必要はありません。この場合の問題は、DataTemplateの内容がまったく伸びていないことです。あなたは、コンテンツのストレッチできるようにあなたのListViewに以下の行を追加する必要が

:ところで

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    </Style> 
</ListView.ItemContainerStyle> 

は、私はあなたのリストビューで、本当に多くの場合、ColumnDefinitionsまたはRowDefinitionsでグリッドを使用している、参照してください。これはあなたのUIを遅くする可能性があります。StackPanelRelativePanelを使用して、不要なグリッドを削除することを検討する必要があります。

+0

私がやっていることは、XMLファイルからインターフェイスを生成しているので、実際にはそのメソッドを使用することはできません。スターの幅を使って、これを試しましたが、実際には動作しません。 –

+0

そして、ボタンはグリッドをクリック可能にするためのものです –

+0

私はそれを今すぐ見ています私は答えを編集しました –

関連する問題