0

長々とすみません、すべての情報が含まれていることを確認してください!

次のようにほぼ円形のセルのビュー (対応する VM を含むビュー) が必要です。

   ********
  **********
 ************
**************
**************
**************
**************
 ************
  **********
   ********

いくつかの複雑な問題: 起動する前に、表示するセルの数がわかりません。すべてのセルのサイズは同じでなければなりません。ビュー全体がスケーラブルでなければなりません。

この簡略化した世界では、ウィンドウは 20 個の RowViewModel オブジェクトを作成し、各コンストラクターに、作成する列の数を渡します。

私の主な見解:

<Viewbox Stretch="Uniform">
    <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}},Path=Rows}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Rows="{Binding Path=Rows.Count}" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</Viewbox>

そして私のRowView:

<Grid>
    <ItemsControl ItemsSource="{Binding Columns}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="{Binding Columns.Count}"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</Grid>

私のセルビュー:

<Border >
    <Viewbox Stretch="Uniform" >
        <Label FontSize="10" Content="{Binding Notice}" Foreground="White" />
    </Viewbox>
</Border>

現状では、すべての行は同じ幅であるため、セルが少ない行ほどセルが広くなります。各行に 20 個のセルがあると伝えた場合、各セルは同じサイズですが、Horizo​​ntalAlignment の設定に関係なくすべてが左揃えになります。おそらく、空白のセルが追加されるためです。空白のセルを必要な場所に挿入できると仮定していますが、これは表示を正しくするためのデータのファッジのように感じます。これは悪いことに同意するでしょう。

私は何千ものアプローチを試しましたが、これがこれまでのところ最も近いと思いますが、見逃しています。助けていただけますか?

お待ち頂きまして、ありがとうございます。

4

1 に答える 1

0

いや、もしかして無理か?グリッドを構築し、生成中に適切な行/列を割り当てる ViewModel にプロパティを追加してから、コンテンツ コントロールをそのグリッドにデータバインドしました。

それは未解決のままです-XAMLでそれを行う方法は?

景色:

<Viewbox Stretch="Uniform">
    <ContentControl Content="{Binding PrettyGrid}" />
</Viewbox>

ビューモデルで:

public Grid PrettyGrid
{
    get
    {
        return BuildGrid(data);
    }
}

および BuildGrid スニペット:

private static Grid BuildGrid(List<objects> cellData)
{
    var localGrid = new Grid();

    // ...

    localGrid.RowDefintions.Add(...);
    localGrid.ColumnDefinitions.Add(...);

    cellData.ForEach(cell => 
    {
        ContentControl ctl = new ContentControl();
        ctl.Content = cell;
        Grid.SetRow(ctl, cell.Row);
        Grid.SetColumn(ctl, cell.Column);
        localGrid.Children.Add(ctl);
    });

    return localGrid;
}
于 2012-08-09T12:31:07.283 に答える