2

ItemsControl で UniformGrid Columns プロパティをバインドしようとしています。

これまでのところ、私は持っています:

<ScrollViewer x:Name="scroll" VerticalScrollBarVisibility="Auto">
    <ItemsControl ItemsSource="{Binding}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid>
                    <UniformGrid.Columns>
                        <MultiBinding Converter="{StaticResource Columns}">
                            <Binding RelativeSource="{RelativeSource Self}" />
                            <Binding Source="{x:Reference scroll}" />
                        </MultiBinding>
                    </UniformGrid.Columns>
                </UniformGrid>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>

    </ItemsControl>
</ScrollViewer>

そしてコンバーターで:

const double TileWidth = 154;
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    double width, aWidth;
    UniformGrid grid = values[0] as UniformGrid;
    ScrollViewer scroll = values[1] as ScrollViewer;
    var gw = grid.Width;
    var gaw = grid.ActualWidth;

    aWidth = scroll.ActualWidth;
    width = aWidth - (scroll.Padding.Left + scroll.Padding.Right);

    return 3;

    // return width / TileWidth;
}

親コントロールの幅を取得して、表示する列の数を決定できません。それらは または のいずれ0.0NaNです。

親の幅を取得して使用可能なスペースを判断するにはどうすればよいですか?

4

1 に答える 1