我想为列表中的“最后”项设置ListView项的底部角半径。我试图用转换器(实际上找到最后一行)这样做,但无济于事。
理想的效果是,在找到ListView中的最后一项后,Converter返回true,最后一个ListViewItem上的边界CornerRadius设置为CornerRadius =“0,0,10,10”。对于ListView中的所有其他项,CornerRadius =“0,0,0,0”
到目前为止我做了什么。
转换器......
public class IsLastItemConverter : IValueConverter
{
#region IValueConverter Members
public object TrueValue { get; set; }
public object FalseValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ListViewItem item = value as ListViewItem;
ListView listView = ItemsControl.ItemsControlFromItemContainer(item) as ListView;
if (listView != null)
{
int index = listView.ItemContainerGenerator.IndexFromContainer(item);
if (index == listView.Items.Count - 1)
{
TrueValue = true;
return (bool)TrueValue;
}
else
{
FalseValue = false;
return (bool)FalseValue;
}
}
FalseValue = false;
return (bool)FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// Just Convert Back
return true;
}
#endregion
}
XAML ......
<local:IsLastItemConverter x:Key="lastItemConverter"
TrueValue="0,0,10,10" FalseValue="0,0,0,0"/>
<DataTemplate x:Key="CellContentTemplate">
<Border
x:Name="CellContentBorder"
Background="{StaticResource GrayCharcoal}"
BorderThickness="4,4,4,4"
BorderBrush="{StaticResource Gray}"
CornerRadius="{Binding Converter={StaticResource lastItemConverter},
RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}"
HorizontalAlignment="Left"
Width="210"
Height="50"
ContextMenu="{StaticResource MarginalUnitsContextMenu}"
ScrollViewer.VerticalScrollBarVisibility="Hidden">...
非常感谢的想法和想法 - 格伦
答案 0 :(得分:0)
我会尝试返回一个真正的CornerRadius而不是一个字符串(你实际上是在返回)。
我的假设如下:
当在xaml中作为字符串“0,0,0,0”作为CornerRadius传递时,相应的Converter用于将此字符串转换为CornerRadius结构。
正如您现在使用的是自定义转换器,可能不再使用CornerRadius转换器的字符串...
编辑(根据Clemens的回答):当从与绑定相关联的自定义转换器返回字符串时,属性的Converter似乎确实启动了! 这是因为CornerRadius有一个关联的TypeConverter:
[TypeConverterAttribute(typeof(CornerRadiusConverter))]
public struct CornerRadius : IEquatable<CornerRadius>
处理此转换。此转换器处理从字符串到CornerRadius的转换。 (摘自http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverterattribute.aspx)