编辑:
我有这个代码。由于某些原因,我无法让内容演示器拉伸以填充画布的宽度。我的几个尝试在xaml.
中被注释掉了。<ItemsControl ItemsSource="{Binding MarkerLocations, Mode=OneTime}" HorizontalContentAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Top" Value="{Binding}" />
<Setter Property="Canvas.Left" Value="0" />
<!--Setter Property="Width" Value="{Binding Path=Width, RelativeSource={RelativeSource FindAncestor, AncestorType=Canvas, AncestorLevel=1}}"/-->
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--Rectangle Stroke="Black" Height="2" Stretch="Fill"/-->
<Line Stretch="Fill" X2="2" Y1="{Binding Mode=OneTime}" Y2="{Binding Mode=OneTime}" Stroke="Black" StrokeThickness="1"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我有一种感觉,我不理解ItemContainters的上下文
如果你想绑定到拉伸对象的宽度,你应该绑定到ActualWidth
:
{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=Canvas}}
编辑:
这可能不是必要的
画布有不占任何空间的习惯,除非你告诉他们:
<ItemsControl ItemsSource="{Binding MarkerLocations, Mode=OneTime}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Background="Red"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
设置Background
是一个有用的"布局调试"技巧,可以查看它是否实际存在。从那里你的一个方法应该工作。