簡體   English   中英

XAML ListBox-如何僅更改最后一項的樣式?

[英]XAML ListBox - How to change style of last item only?

我有一個RadDataBoundListBox (來自Telerik),它代表一個列表項。 每個項目都由底線x:Name="ItemSeparatorBorder" ListBox本身也具有包含行的頁眉和頁腳( x:Name="ListTopBorder"x:Name="ListBottomBorder" )。 現在,我需要一種方法來禁用此ListBox中最后一項 的行x:Name="ItemSeparatorBorder" )。

我考慮過使用將當前項目的索引與ListBox的總數匹配的Converter將某些Visibility綁定到x:Name="ItemSeparatorBorder" 但是我不知道如何實現它,也找不到任何好的示例。

該代碼應在Windows Phone 8.0 / .NET 4.0上有效。

到目前為止,這是我的代碼:

    <telerikPrimitives:RadDataBoundListBox
        x:Name="ListBox"
        ItemsSource="{Binding Items}">

        <telerikPrimitives:RadDataBoundListBox.ListHeaderTemplate>
            <DataTemplate>
                <Grid Height="30">
                    <Border
                        x:Name="ListTopBorder"
                        Height="1" 
                        VerticalAlignment="Bottom"
                        Background="Blue"/>
                </Grid>
            </DataTemplate>
        </telerikPrimitives:RadDataBoundListBox.ListHeaderTemplate>

        <telerikPrimitives:RadDataBoundListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="1"></RowDefinition>
                    </Grid.RowDefinitions>

                    <controls:ListItem Margin="30,10,0,10">/>

                    <Border 
                        x:Name="ItemSeparatorBorder"
                        Grid.Row="1" 
                        Height="1" 
                        Background="Blue" 
                        Margin="30,0,0,0"/>

                </Grid>
            </DataTemplate>
        </telerikPrimitives:RadDataBoundListBox.ItemTemplate>

        <telerikPrimitives:RadDataBoundListBox.ListFooterTemplate>
            <DataTemplate>
                <Grid Height="30">
                    <Border
                        x:Name="ListBottomBorder"
                        Height="1" 
                        VerticalAlignment="Top"
                        Background="Blue"/>
                </Grid>
            </DataTemplate>
        </telerikPrimitives:RadDataBoundListBox.ListFooterTemplate>

    </telerikPrimitives:RadDataBoundListBox>

如何隱藏最后一個項目的邊框?

為了更加清楚,我想在這里刪除最后一條藍線: 在此處輸入圖片說明

我認為最好的方法是使用IValueConverter,該IValueConverter獲取對items集合的引用。 創建一個繼承DependencyObject的轉換器,並為其提供源列表的屬性。 然后您可以檢查當前項目索引:

public class ItemToVisibilityConverter : DependencyObject, IValueConverter
{
    public IList Items
    {
        get { return (IList )GetValue(ItemsProperty); }
        set { SetValue(ItemsProperty, value); }
    }
    public static readonly DependencyProperty ItemsProperty=
        DependencyProperty.Register("Items", typeof(IList), typeof(ItemToVisibilityConverter), new PropertyMetadata(null));

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool hide = Items != null 
            && value != null 
            && Items.IndexOf(value) == Items.Count - 1;
        return (hide ? Visibility.Collapsed : Visibility.Visible);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException;
    }
}

將轉換器實例放入控件的資源中:

<telerikPrimitives:RadDataBoundListBox
        x:Name="ListBox"
        ItemsSource="{Binding Items}">
    <telerikPrimitives:RadDataBoundListBox.Resources>
        <ResourceDictionary>
            <local:ItemToVisibilityConverter x:Key="ItemToVisibilityConverter"
                    Items="{Binding Items}" />
        </ResourceDictionary>
    </telerikPrimitives:RadDataBoundListBox.Resources>

    ...
</telerikPrimitives:RadDataBoundListBox>

最后,在“ ItemTemplate”中,使用轉換器綁定到當前項目:

<Border x:Name="ItemSeparatorBorder"
        Visibility="{Binding Converter={StaticResource ItemToVisibilityConverter}}"
        ... />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM