작성해야 할 공간을 기준으로 각 화살표에 하나씩 항목을 생성하면됩니다. 변환기이 내가 단지 ContentPresenter에 사용하고보기에 그 바인딩 것이 경우에 우리의 높이가 sopmething을 변환 할 필요가
public void MakeArrowListConverter : IValueConverter
{
public double ArrowHeight {get;set;}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var verticalSpace = (double) value;
int numberOfArrows = (int)(verticalSpace/ArrowHeight);
return Enumerable.Range(0, numberOfArrows);
}
}
으로 시작할 수 있습니다.
<ContentPresenter x:Name="content" Content="{Binding}"/>
그래서 우리는 단순히 높이를 가지고 목록으로 변환 할 필요가
사실
<xxx.Resources>
<convertors:MakeArrowListConverter x:Key="makeArrowListConverter" />
</xxx.Resources>
<ListBox ItemsSource="{Binding ElementName=content, Path=ActualHeight, Converter={StaticResource makeArrowListConverter}}">
<ItemTemplate>
<DataTemplate>
<!-- Image or Shape, this is your red arrow-->
<YourArrow/>
</DataTemplate>
</ItemTemplate>
</ListBox>
우리는로 데이터의 각 항목을 변환하는 DataTemplate을에 다른에이 두 가지 요소를 넣을 수 있습니다 그것의 표시 양식은 목록에 사용되는 경우
<DataTemplate DataType="{x:Type MyView}">
<!--This is your blue box-->
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
<ContentPresenter x:Name="content" Content="{Binding}"/>
<ListBox ItemsSource="{Binding ElementName=content, Path=ActualHeight, Converter={StaticResource makeArrowListConverter}}">
<ItemTemplate>
<DataTemplate>
<!-- Image or Shape, this is your red arrow-->
<YourArrow/>
</DataTemplate>
</ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
<!-- And this is your orange box-->
<ListBox ItemsSource="{Binding YourListOfViews}"/>
StackPanel 사용하면 도움이 될 것입니다! –
Brush.TileMode = Tile 및 ViewportUnits = Absolute를 사용하여 일부 브러시를 배경으로 사용해보십시오. – MaMazav
나는 이것에 대해 생각했지만 화살은 오브제였습니다. 그들은 변화 할 수있는 속성을 가지고 있습니다! – NTinkicht