2016-10-27 8 views
1

私はWPF経由でグリッドを構築しています。グリッドの上に表示する行、バー、または何かを追加する必要があります。グリッドの上に表示されるものは、コードによって読み込まれるいくつかのテキスト項目があります。私は道具を使っていましたが、既存の(そして作業中の)グリッドの上に別のパネルを配置する方法を見つけることができません。これは私のコードです:アイテムのグリッドの上にテキストの行を追加する

<Window x:Class="GridWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Board" SizeToContent="WidthAndHeight" Height="Auto" Width="Auto"> 
    <Window.Resources> 
     <DataTemplate x:Key="DataTemplate_2"> 
      <Button Content="{Binding}" Height="25" Width="25" Margin="0,0,0,0"/> 
     </DataTemplate> 
     <DataTemplate x:Key="DataTemplate_1"> 
      <ItemsControl ItemsSource="{Binding}" ItemTemplate="{DynamicResource DataTemplate_2}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
      </ItemsControl> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid Name="GridBoard" ShowGridLines="True"> 
     <ItemsControl x:Name="GridItems" ItemTemplate="{DynamicResource DataTemplate_1}"/> 
    </Grid> 
</Window> 

GridItemsは、ギザギザの配列によって読み込まれ、表示されます。ボックスの上にいくつかのテキストオブジェクトを置くか、グリッドの幅に合った水平のパネルだけを置くだけです。

答えて

1

ラッパーグリッドを追加し、内部グリッドを2番目の行に配置するのが最も簡単なオプションです。したがって、必要なものを置くために、最初の行(行0)があります。

<Window x:Class="GridWPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Board" SizeToContent="WidthAndHeight" Height="Auto" Width="Auto"> 
<Window.Resources> 
    <DataTemplate x:Key="DataTemplate_2"> 
     <Button Content="{Binding}" Height="25" Width="25" Margin="0,0,0,0"/> 
    </DataTemplate> 
    <DataTemplate x:Key="DataTemplate_1"> 
     <ItemsControl ItemsSource="{Binding}" ItemTemplate="{DynamicResource DataTemplate_2}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <Grid> 
     <!-- WHATEVER YOU NEED --> 
    </Grid> 

    <Grid Name="GridBoard" ShowGridLines="True" Grid.Row="1"> 
     <ItemsControl x:Name="GridItems" ItemTemplate="{DynamicResource DataTemplate_1}"/> 
    </Grid> 
</Grid> 

0

出力がどのように表示されるかはわかりませんが、 "GridBoard" Gridを別のGridにネストできます。新しい外側の0​​には2行が定義されています。最初の行には、あなたが好きなものを置くことができます。これは、例えば次のようになります。あなたが外Gridの最初の行の内容のための任意の要素を使用することができ

<Window x:Class="GridWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Board" SizeToContent="WidthAndHeight" Height="Auto" Width="Auto"> 
    <Window.Resources> 
     <DataTemplate x:Key="DataTemplate_2"> 
      <Button Content="{Binding}" Height="25" Width="25" Margin="0,0,0,0"/> 
     </DataTemplate> 
     <DataTemplate x:Key="DataTemplate_1"> 
      <ItemsControl ItemsSource="{Binding}" ItemTemplate="{DynamicResource DataTemplate_2}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
      </ItemsControl> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Grid Grid.Row="0"> 
     <TextBlock Text="Put something here ..." /> 
     </Grid> 
     <Grid Grid.Row="1" Name="GridBoard" ShowGridLines="True"> 
      <ItemsControl x:Name="GridItems" ItemTemplate="{DynamicResource DataTemplate_1}"/> 
     </Grid> 
    </Grid> 
</Window> 

注意を。これはあなたの実際のニーズに依存します。この例では、別のGridを使用しましたが、これは単一のTextBlockを含んでいます。

0

それを達成するためのいくつかの方法があります。

1 - あなたはグリッドの定義に行と列を追加することができます。

<Grid.ColumnDefinitions> 
    <ColumnDefinition width="*" /> 
    <ColumnDefinition width="*" /> 
    <ColumnDefinition width="*" /> 
</Grid.ColumnDefinitions> 
<Grid.RowDefinitions> 
    <RowDefinition Height="auto" /> 
    <RowDefinition Height="*" /> 
</Grid.RowDefinitions> 

次に、あなたがちょうどそうのように、各列に「ヘッダ」を割り当てることができます。

<TextBlock ... Grid.Column="0" /> 
<TextBlock ... Grid.Column="1" /> 
<TextBlock ... Grid.Column="2" /> 

そして、あなたを配置しますまたはあなたのCAでは動作しない可能性があり

<ItemsControl ... Grid.Row="1" Grid.ColumnSpan="3" /> 

中途半端な方法:2行目のItemsControl se。 DataTemplateを見ずに知る方法はありません。

2 - あなたは似た半ソリューションを使用することができるのItemsControl

に適用余裕でトップでのStackPanel、 - そうのように、固定値にあなたのItemsControlの上マージンを設定します。

<ItemsControl ... Margin="2,48,2,2" /> 

そして、あなたのグリッドにStackPanelを追加します。

<StackPanel Height="48" VerticalAlignment="Top"> 
    <TextBlock Text="First Header" Width="300" /> 
    ... 
</StackPanel> 

私はあなたのアイデアを得ると確信しています。

3 - これはしかし、ListViewにごItemsControlを変更する必要でしょうGridViewの-RECOMMENDED-

を使用してください。

Hereは、GridView for WPFに関するよく書かれたチュートリアルです。確かに、それはあなたが探しているものではないかもしれませんが、あなたが提示しようとしているものが分からなければ、最良の解決策を見つけることは困難です。

関連する問題