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.0
かNaN
です。
親の幅を取得して使用可能なスペースを判断するにはどうすればよいですか?