我正在尝试创建这样的控件:
该控件表示4个瓷砖对象的状态完成(在上面的附图中,2已完成,2未完成)
为了实现这一点,我创建了一个水平方向的 ListView,并且我正在创建一个内部有一些边框的数据模板。不确定这是否是正确的方法或者是否可以使用更简单的方法,但是我面临的问题是下列的:
我无法关闭最后一项的边框。这是因为我的列表视图的 itemsource 中有 4 个项目,并且每个项目都在左侧绘制了一个边框。问题是我如何专门为最后一项绘制右边框。
穿过中间的线实际上应该在灰色阴影后面......我该如何实现?
代码如下:
<Style x:Key="FishBoneStyle" TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Completed}" Value="True">
<Setter Property="Background" Value="DarkGray"/>
<Setter Property="Margin" Value="0,3,-2,3"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="FishBoneTemplate">
<Grid Height="25">
<Border BorderThickness="1,0,0,0" BorderBrush="Black" Height="25" HorizontalAlignment="Left" VerticalAlignment="Stretch"/>
<Border Style="{StaticResource FishBoneStyle}" x:Name="FishBoneBorder" Width="25">
</Border>
</Grid>
</DataTemplate>
<!-- The Main Grid-->
<Grid Grid.Row="1" Height="30" Width="130" HorizontalAlignment="Left">
<ListView BorderThickness="0,0,0,0" BorderBrush="Black" ItemsSource="{Binding ProgressTiles}" ItemTemplate="{StaticResource FishBoneTemplate}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
<!-- The line which passess through the center-->
<Border VerticalAlignment="Center" HorizontalAlignment="Left" Width="100" Margin="3,0,2,0" BorderBrush="Black" BorderThickness="1"></Border>
</Grid>
..这是位于我的视图模型中的可观察集合中的模型。总是有4个。
public class ProgressTile : INotifyPropertyChanged
{
private bool _completed;
public bool Completed
{
get { return _completed; }
set
{
_completed = value;
InvokePropertyChanged("Completed");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void InvokePropertyChanged(string e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(e));
}
}
请您建议如何获得与所附图片一致的外观。您还可以建议如何解决为最后一项绘制边框并将穿过中间的线发送到背景的问题吗?